swar 3问题与CVarArg被多次传递
发布时间:2020-12-14 04:46:53 所属栏目:百科 来源:网络整理
导读:我在 swift 3中有以下代码: class StringUtility { static func Localizer(tableName: String?) - (_ key: String,_ params: CVarArg...) - String { return { (key: String,params: CVarArg...) in let content = NSLocalizedString(key,tableName: tableN
我在
swift 3中有以下代码:
class StringUtility { static func Localizer(tableName: String?) -> (_ key: String,_ params: CVarArg...) -> String { return { (key: String,params: CVarArg...) in let content = NSLocalizedString(key,tableName: tableName,comment: "") if params.isEmpty { return content } print(params) ->>>>>> this prints [[[Wells Fargo]]] return NSString.init((format: content,arguments: getVaList(params))) as String } } } func localizationHelper(tableName: String,key: String,params: CVarArg...) -> String { let t = StringResourceUtility.Localizer(tableName: tableName) print(params) - >>>>>>>>>> this prints [[Wells Fargo]] return t(key,params) } 如果在上面两个函数中看到print语句,每次在函数内部传递CVarArg时都会附加[],导致输出错误的本地化字符串. 1)CVarArg不能像上面的代码一样多次传递? 解决方法
你不能将变量参数列表传递给另一个函数
必须传递一个CVaListPointer.还有withVaList应该 用来代替getVaList: class StringResourceUtility { static func Localizer(tableName: String?) -> (_ key: String,_ params: CVaListPointer) -> String { return { (key: String,params: CVaListPointer) in let content = NSLocalizedString(key,comment: "") return NSString(format: content,arguments: params) as String } } } func localizationHelper(tableName: String,params: CVarArg...) -> String { let t = StringResourceUtility.Localizer(tableName: tableName) return withVaList(params) { t(key,$0) } } 例: let s = localizationHelper(tableName: "table",key: "%@ %@",params: "Wells","Fargo") print(s) // Wells Fargo (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |