我正在尝试转换设备令牌并使用以下代码(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
。我在这里做错了什么?
答案 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)}
这两种方法都会使代码编译,因此这可能是编译器错误。