【问题标题】:Cannot convert value of type 'UnsafeRawPointer' to expected argument type 'RawPointer' in Swift5无法在 Swift 5 中将“UnsafeRawPointer”类型的值转换为预期的参数类型“Raw Pointer”
【发布时间】:2019-09-13 18:42:20
【问题描述】:

我正在尝试获取设备令牌。

  1. 首先,这是独一无二的价值吗?

    我认识到它是一种独特的价值,并试图得到它。而且我是按照方法获取设备令牌的时候看到错误的。

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        let chars = UnsafePointer<CChar>((deviceToken as NSData).bytes)  // get Error 
        var token = ""
        
        for i in 0..<deviceToken.count {
            token += String(format: "%02.2hhx", arguments: [chars[i]])
        }
        
        print("Registration succeeded!")
        print("Token: ", token)
    }

错误是无法将“UnsafeRawPointer”类型的值转换为预期值 参数类型'RawPointer'

如何消除此错误?

  1. 如果您重新安装应用程序,这个值不会改变吗?

【问题讨论】:

标签: ios swift device


【解决方案1】:

从 Swift 3 开始,您可以更简单地将 Data 转换为十六进制字符串

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {  
    let token = deviceToken.map{ String(format: "%02x", $0) }.joined()
    print("Registration succeeded!")
    print("Token: ", token)
}

您的问题:

  1. 是的
  2. 值会定期更改。如果您不管理发送推送通知的服务器,则无需关心令牌。

【讨论】:

  • 谢谢,但是这个值在用户重新安装应用时不会改变吗?
  • 感谢您修改后的回复。我想再问你一个问题。那么,如果我想获得一个在用户重新安装应用时不会改变的值,我该如何获得呢?
  • 当您重新安装应用程序时,该值基本上不会改变,但您无法控制令牌。 APN 服务器可以随时发送新的令牌。
猜你喜欢
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多