2015-04-03 64 views
1

我想在Swift中存儲一個字符串作爲常量,所以我可以重用它並向其中注入變量。例如,我可以在C#中執行此操作:在Swift中創建字符串模板?

var template = "Your name is {0} and your age is {1}." 
someLabel.text = string.Format(template, "John", 35) 
some2Label.text = string.Format(template, "Jane", 33) 

如何在Swift中完成此操作,以便重新使用字符串模板?

+1

Swift可以調用Objective-C Cocoa方法,所以看看NSString的'stringWithFormat:'方法 - 它在Swift中的工作方式與Objective-C中的一樣。 – matt 2015-04-03 00:35:06

+0

謝天謝地,我跳過了Objective-C,所以不知道。 – TruMan1 2015-04-03 00:36:08

+3

但這不是重點。重點是文檔仍然是文檔。閱讀NSString上的文檔。它在那裏。 – matt 2015-04-03 00:36:59

回答

13

使用SWIFT的printf式的語法來保存模板,然後用它是這樣的:

var template = "Your name is %@ and your age is %d." 
someLabel.text = String(format: template, "John", 35) 
some2Label.text = String(format: template, "Jane", 33) 

如果你還沒有使用的語法的這種風格之前這裏是一個粗略的指南:

  • %@:字符串(或如nhgrif指出的那樣,一個NSObjectdescription/descriptionWithLocale屬性)
  • %d:INT
  • %f:Double
  • %.2f:Double精度爲2,例如, 2.2342 - > 2.23

Here's the documentation if you require more precision.

+2

'%@'不僅僅是'String'。 – nhgrif 2015-04-03 00:43:12

+0

好答案(已投票)。我想知道你是否也可以使用Swift風格的格式字符串作爲參數? 'let aString =「John has \(count)jellybeans」;讓newString = String(format:aString,count)' – 2015-04-03 02:06:24

3

你已經有一個答案,但如果你想類型的安全性和本地化的代碼,您可以用枚舉這樣的:

enum Greeting: CustomStringConvertible { 

    case SayHello(String) 

    var description:String { 
     switch (self) { 
     case .SayHello(let name): 
      return "Say hello to \(name)?" 
     } 
    } 
} 

let a = Greeting.SayHello("my little friend") 

注意,不採取放的混合方法妨礙你將所有的字符串模板放在一個位置,並通過String(format:...)方法將它們構建爲類型安全枚舉。你只需要仔細實施它(但只有一次)。