在某些语言中,例如C#,您可以通过以下方式创建字符串:
"String {0} formatted {1} "
然后通过传递值格式化String.format
来格式化它。
上述声明很好,因为您在创建字符串时不必知道其参数的类型。
我试图在Swift中找到类似的方法,但我发现的东西类似于以下格式:
"String %d formatted %d"
要求您使用String(format: , parameters)
格式化字符串。这不好,因为在声明字符串时你还必须知道参数类型。
在Swift中是否有类似的方法,我不必知道参数类型?
答案 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