与(Objective-)C中类似,您不能将变量参数列表直接传递给另一个函数。您必须创建一个
CVaListPointer
(与
va_listC语言中的Swift等效)并调用一个带有
CVaListPointer参数的函数。
所以这可能是您要寻找的:
extension String { func getLocalizeWithParams(args : CVarArgType...) -> String { return withVaList(args) { NSString(format: self, locale: NSLocale.currentLocale(), arguments:withVaList()``CVaListPointer) } as String }}
NSString从给定的参数列表创建一个,并以该指针作为参数调用闭包。
示例(来自
let msg = "%@: %fn".getLocalizeWithParams("Cost", 1234.56)print(msg)文档):
Cost: 1,234.560000
美国地区的输出:
Cost: 1.234,560000
德语语言环境的输出:
更新:
Swift 3/4/5开始, 从
String(format: String, locale: Locale?, arguments: [CVarArg])可以将参数传递给
extension String { func getLocalizeWithParams(_ args : CVarArg...) -> String { return String(format: self, locale: .current, arguments: args) }}
直:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)