无法转换设备令牌Swift 3

时间:2016-10-04 03:58:10

标签: ios swift swift3

我正在尝试转换设备令牌并使用以下代码(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。我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

试试这个

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)
 }

答案 1 :(得分:0)

实际上您的代码使用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)}

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