【问题标题】:Trouble converting device token Swift 3转换设备令牌 Swift 3 时遇到问题
【发布时间】:2016-10-04 03:58:10
【问题描述】:

我正在尝试转换设备令牌并使用以下代码 (swift 3):

parameters["device_token"] = request.deviceToken.reduce("", {$0 + String(format: "%02X", $1)}). 

但是我收到编译器错误Binary operator '+' cannot be applied to operands of type Any? and String。我在这里做错了什么?

【问题讨论】:

    标签: ios swift swift3


    【解决方案1】:

    试试这个

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    
    var token = ""
    
    for i in 0..<deviceToken.count {
     token = token + String(format: "%02.2hhx", arguments: [deviceToken[i]])
      }
    
      print("Registration succeeded!")
      print("Token: ", token)
     }
    

    【讨论】:

    【解决方案2】:

    实际上您的代码使用reduce 将设备令牌转换为 十六进制字符串是正确的。但显然parameters 有这种类型 NSMutableDictionary(或[String: Any]),编译器尝试 将初始值"" 匹配到Any?

    作为一种解决方法,您可以将十六进制字符串分配给临时变量 第一:

    let hexToken = request.deviceToken.reduce("", {$0 + String(format: "%02X", $1)})
    parameters["device_token"] = hexToken
    

    或使用尾随闭包语法:

    parameters["device_token"] = deviceToken.reduce("") {$0 + String(format: "%02X", $1)}
    

    这两种方法都可以编译您的代码,因此这可能是编译器错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2017-10-23
      相关资源
      最近更新 更多