在Swift中格式化字符串

Vic*_*ler 4 string formatting ios swift

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

"String {0} formatted {1} "
Run Code Online (Sandbox Code Playgroud)

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

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

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

"String %d formatted %d"
Run Code Online (Sandbox Code Playgroud)

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

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

qwe*_*_so 9

使用这个:

let printfOutput = String(format:"%@ %2.2d", "string", 2)
Run Code Online (Sandbox Code Playgroud)

它与printf或Obj-C格式相同.

您也可以这样混合它:

let parm = "string"
let printfOutput = String(format:"\(parm) %2.2d", 2)
Run Code Online (Sandbox Code Playgroud)

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

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

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

let format = "%@"
let data = "String"
let s = String(format: "\(format)", data) // prints "String"
Run Code Online (Sandbox Code Playgroud)

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