iOS實現能接受格式化字串的方法

2021-07-10 15:34:20 字數 811 閱讀 6170

有時在我們自己的類中提供乙個能接受格式化字串的方法會很方便使用。假設我們要實現的是乙個 to do 應用,它包含乙個 item 類。我們想要提供:

+ (instancetype)itemwithtitleformat:(nsstring *)format, ...
如此我們就可以使用:

item *item = [item itemwithformat:@"need to buy %@ for %@", food, pet];
這種型別的方法可以接受可變數量的引數,所以被稱為可變引數方法。我們必須使用乙個定義在stdarg.h裡的巨集來使用可變引數。上面方法的實現**可能會像下面這樣:

+ (instancetype)itemwithtitleformat:(nsstring *)format, ...;

進一步,我們要新增ns_format_function到方法的定義裡(在標頭檔案中),如下所示:

+ (instancetype)itemwithtitleformat:(nsstring *)format, ... ns_format_function(1,2);
ns_format_function展開為乙個方法__attribute__,它會告訴編譯器在索引1處的引數是乙個格式化字串,而實際引數從索引2開始。這將允許編譯器檢查格式化字串而且會像 nslog() 和 -[nsstring stringwithformat:] 一樣輸出警告資訊。

字串格式化

sprintf snprintf snprintf std stringstream std strstream boost lexical cast boost format cstring format 1 sprintf 使用 sprintf 不安全,輕則破壞資料的準確性,重則程式崩潰。請看下...

格式化字串

通常在使用字串的時候,會對字串進行格式化,然後輸出或呼叫 一般我們使用替換標記對字串進行格式化 string str1 string.format add is 1,2,3 而且在c 中的替換標記可以以任意順序和次數出現在格式化字串中,但替換值是按順序排的,而且替換標記不能超出索引範圍 string...

字串格式化

例如 string s hello map.put target world string res format s,map 有什麼用呢?比如在some.properties中配置模板字串,但是如果用 這種方式,在配置了spring讀取properties注入變數的時候,這個變數就找不到會報錯。這個...