加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

解决方法

你不能将变量参数列表传递给另一个函数
必须传递一个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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读