2011-11-03 305 views

回答

6

按照specification

各轉換規範由 '%' 字符引入,或者通過字符序列「 %n $「,之後按順序出現:

  • 零個或多個標誌(以任何順序),其中的修改y轉換規範的含義。

  • 可選的最小字段寬度。如果轉換後的值的字節數少於字段寬度,則默認在左側填充空格;如果下面描述的左調整標記(' - ')被賦予字段寬度,它應該被填充在右邊。字段寬度採用星號('*')(如下所述)或十進制整數。

  • 可選精度,給出d,i,o,u,x和X轉換說明符的最小位數;在a,e,E,f和F轉換說明符的基數字符之後出現的數字位數; g和G轉換說明符的最大有效位數;或從s [XSI] [Option Start]和S [Option End]轉換說明符中的字符串打印的最大字節數。精度採用句點('。')的形式,後面跟着一個星號('*'),如下所述,或者一個可選的十進制數字字符串,其中空數字字符串被視爲零。如果精度與任何其他轉換說明符一起出現,則行爲未定義。

  • 一個可選的長度修飾符,用於指定參數的大小。

  • 指示要應用的轉換類型的轉換說明符字符。

我們正在使用的第一類型的轉換,因爲有一個在這裏沒有美元符號。請注意上面列表頂部的字樣,順序爲@是一個轉換說明符字符(如提到here),它表示我們應該訪問作爲NSObject傳入的值並閱讀其description屬性。由於我們已經達到最後一個要點,格式代碼實際上在@符號後結束,正如@Kevin Ballard指出的那樣,-1被解析爲文字文本。

6

這只是打印「NUM-1」(其中NUM是數字)。舉個例子,如果數字是5,那麼將打印「5-1」。

使用格式字符串時,格式標記的任何修飾符都必須出現在格式類型說明符之前。在這種情況下,這意味着%@令牌的任何修飾符都必須出現在%@之間(儘管我不確定實際上是否有任何%@接受的修飾符)。

3

子數可能是像NSNumber這樣的類的對象。就像我們使用%d代表int,%f代表float,%@是參考文獻的佔位符。在這種情況下

NSNumber *subnumber = [NSNumber numberWithInt:5]; 
NSLog([NSString stringWithFormat:@"%@-1", subnumber]); 

將打印 '5-1'

+1

我建議不要使用動態創建的字符串作爲第一個參數到'NSLog()'。事實上,如果我沒有記錯的話,編譯器會警告它。 – 2011-11-03 05:45:33

+0

'NSLog'的參數已經是一個格式化字符串,所以你應該只寫'NSLog(@「%@ - 1」,子編號);' – darvids0n