swift 3问题,CVarArg被多次通过

swift 3问题,CVarArg被多次通过,swift,Swift,我在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: t

我在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不能像上面的代码那样多次传递?
2) 如何解决此问题?

不能将变量参数列表传递给另一个函数,必须 必须传递一个
CVaListPointer
。此外,还应使用Valist

用于代替
getVaList

class StringResourceUtility {

    static func Localizer(tableName: String?) -> (_ key: String, _ params: CVaListPointer) -> String {
        return { (key: String, params: CVaListPointer) in
            let content = NSLocalizedString(key, tableName: tableName, comment: "")
            return NSString(format: content, arguments: params) as String
        }
    }
}

func localizationHelper(tableName: String, key: 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
这是一个关于在Swift中实现健壮架构的本地化的示例