ViT*_*TUu 11 arguments args swift
我有一个简单的问题.我尝试在很多博客中搜索这个问题但是所有网站都返回了如何快速工作的功能,但我需要这个案例.
我的自定义功能是:
func getLocalizeWithParams(args:CVarArgType...)->String {
     return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions
}
我如何通过args将我的args传递给其他系统函数?
谢谢你.
Mar*_*n R 20
与(Objective-)C类似,您不能将变量参数列表直接传递给另一个函数.你必须创建一个CVaListPointer
(va_list在C中的Swift等价物)并调用一个带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)
    }
}
| 归档时间: | 
 | 
| 查看次数: | 5938 次 | 
| 最近记录: |