在Swift中格式化字符串

时间:2015-03-19 20:16:17

标签: ios string swift formatting

在某些语言中,例如C#,您可以通过以下方式创建字符串:

"String {0} formatted {1} "

然后通过传递值格式化String.format来格式化它。

上述声明很好,因为您在创建字符串时不必知道其参数的类型。

我试图在Swift中找到类似的方法,但我发现的东西类似于以下格式:

"String %d formatted %d"

要求您使用String(format: , parameters)格式化字符串。这不好,因为在声明字符串时你还必须知道参数类型。

在Swift中是否有类似的方法,我不必知道参数类型?

2 个答案:

答案 0 :(得分:8)

使用这个:

let printfOutput = String(format:"%@ %2.2d", "string", 2)

与printf或Obj-C格式相同。

您也可以这样混合:

let parm = "string"
let printfOutput = String(format:"\(parm) %2.2d", 2)

编辑:感谢MartinR(他知道这一切;-)

  

混合字符串插值和格式化时要小心。如果parm包含百分比字符,String(format:"\(parm) %2.2d", 2)将崩溃。在(Objective-)C中,如果格式字符串不是字符串文字,则clang编译器会发出警告。

这为黑客提供了一些空间:

let format = "%@"
let data = "String"
let s = String(format: "\(format)", data) // prints "String"

与在编译时解析格式字符串的Obj-C相反,Swift不会这样做,只是在运行时解释它。

答案 1 :(得分:1)

在Swift中,您可以将其放在带有反斜杠和括号的字符串中:

"Integer value \(intVal) and double value \(doubleVal)"

唯一的要求是括号之间的类型必须符合Printable protocol

有关Swift中字符串插值的更多信息:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html#//apple_ref/doc/uid/TP40014097-CH7-ID292