我有一个简单的问题.我尝试在很多博客中搜索这个问题但是所有网站都返回了如何快速工作的功能,但我需要这个案例.
- func getLocalizeWithParams(args:CVarArgType...)->String {
- return NSString.localizedStringWithFormat(self,args); //error: Expected expression in list of expressions
- }
我如何通过args将我的args传递给其他系统函数?
谢谢你.
与(Objective-)C类似,您无法传递变量参数列表
直接到另一个功能.您必须创建一个CVaListPointer
(Swift相当于C中的va_list)并调用一个函数
采用CVaListPointer参数.
直接到另一个功能.您必须创建一个CVaListPointer
(Swift相当于C中的va_list)并调用一个函数
采用CVaListPointer参数.
所以这可能是你正在寻找的:
- extension String {
- func getLocalizeWithParams(args : CVarArgType...) -> String {
- return withVaList(args) {
- NSString(format: self,locale: NSLocale.currentLocale(),arguments: $0)
- } as String
- }
- }
withVaList()从给定的参数列表创建一个CVaListPointer
并使用此指针作为参数调用闭包.
示例(来自NSString文档):
- let msg = "%@: %f\n".getLocalizeWithParams("Cost",1234.56)
- print(msg)
美国语言环境的输出:
- Cost: 1,234.560000
德语区域设置的输出:
- Cost: 1.234,560000
更新:从Swift 3/4开始,可以将参数传递给
- String(format: String,locale: Locale?,arguments: [CVarArg])
直:
- extension String {
- func getLocalizeWithParams(_ args : CVarArg...) -> String {
- return String(format: self,locale: .current,arguments: args)
- }
- }