带args的Swift函数...使用args传递给另一个函数

我有一个简单的问题。我在很多博客中搜索过这个问题,但是所有的网站都返回了在快速工作中的功能,但是我需要这个案例。
我的自定义功能是:

func getLocalizeWithParams(args:CVarArgType...)->String {
     return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions
}

如何通过args将args传递给其他系统函数?
先谢谢。


最佳答案:

与(目标-)C中类似,不能传递变量参数列表
直接到另一个函数。您必须创建一个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()文档):
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)
    }
}

评论