Swift 带有 args 的函数...传递给带有 args 的另一个函数
Swift function with args... pass to another function with args
我有一个简单的问题。我尝试在许多博客中搜索有关此问题的内容,但所有站点 return swift 中的功能如何工作,但我需要这种情况。
我的自定义函数是:
func getLocalizeWithParams(args:CVarArgType...)->String {
return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions
}
如何使用 args 将我的 args 传递给其他系统函数?
提前致谢。
我认为您使用 NSString.localizedStringWithFormat(self, args)
不正确。否则使用 args 调用另一个函数没有错。
如果您看下面,您需要将格式指定为 NSString 作为第一个参数:
NSString.localizedStringWithFormat(format: NSString, args: CVarArgType...)
这个 SO 问题解释了如何在 Swift 中使用它:iOS Swift and localizedStringWithFormat
与 (Objective-)C 类似,您不能传递可变参数列表
直接到另一个函数。您必须创建一个 CVaListPointer
(Swift 相当于 C 中的 va_list
)并调用一个函数
采用 CVaListPointer
参数。
这可能就是您要找的:
extension String {
func getLocalizeWithParams(args : CVarArgType...) -> String {
return withVaList(args) {
NSString(format: self, locale: NSLocale.currentLocale(), arguments: [=10=])
} 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/5 开始,可以将参数传递给
String(format: String, locale: Locale?, arguments: [CVarArg])
直接:
extension String {
func getLocalizeWithParams(_ args : CVarArg...) -> String {
return String(format: self, locale: .current, arguments: args)
}
}
我有一个简单的问题。我尝试在许多博客中搜索有关此问题的内容,但所有站点 return swift 中的功能如何工作,但我需要这种情况。
我的自定义函数是:
func getLocalizeWithParams(args:CVarArgType...)->String {
return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions
}
如何使用 args 将我的 args 传递给其他系统函数?
提前致谢。
我认为您使用 NSString.localizedStringWithFormat(self, args)
不正确。否则使用 args 调用另一个函数没有错。
如果您看下面,您需要将格式指定为 NSString 作为第一个参数:
NSString.localizedStringWithFormat(format: NSString, args: CVarArgType...)
这个 SO 问题解释了如何在 Swift 中使用它:iOS Swift and localizedStringWithFormat
与 (Objective-)C 类似,您不能传递可变参数列表
直接到另一个函数。您必须创建一个 CVaListPointer
(Swift 相当于 C 中的 va_list
)并调用一个函数
采用 CVaListPointer
参数。
这可能就是您要找的:
extension String {
func getLocalizeWithParams(args : CVarArgType...) -> String {
return withVaList(args) {
NSString(format: self, locale: NSLocale.currentLocale(), arguments: [=10=])
} 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/5 开始,可以将参数传递给
String(format: String, locale: Locale?, arguments: [CVarArg])
直接:
extension String {
func getLocalizeWithParams(_ args : CVarArg...) -> String {
return String(format: self, locale: .current, arguments: args)
}
}