ios - 无法访问 [AnyHashable :Any] - Swift 4 类型的值

标签 ios swift push-notification userinfo

我正在尝试从类型为 [AnyHashable: Any] 的变量访问特定值,但是,我在访问任何值时遇到错误。我已经浏览了有关此问题的互联网,但没有找到任何具体的解决方案。那么有没有其他方法可以访问它们?请帮助并提前致谢。

我遇到错误的函数

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        if let messageID = userInfo[gcmMessageIDKey] {
            print("Message ID: \(messageID)")
        }
        //Print full message
        print(userInfo)

        guard let aps = userInfo[AnyHashable("gcm.notification.data")],
            let data = aps["filters"] as! String else { // Getting the error here
                return
        }
        print(aps)
        completionHandler(UIBackgroundFetchResult.newData)
    }

获取打印用户信息的数据

[AnyHashable("gcm.notification.data"): {"filters":"fjjnbbx zjbxzj","history":"dsfdxf","message":"value1","source":"message source"}]

最佳答案

我解决了这个问题,因为我收到的信息是 NSString(字符串中的 JSON)类型,而不是 NSDictionary/[String : Any]。我在下面提供了解决我的问题的工作代码 -

if let notificationData = userInfo["gcm.notification.data"] as? NSString {
                var dictionary : NSDictionary?
                if let data = notificationData.data(using: String.Encoding.utf8.rawValue) {
                    do {
                        dictionary = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary
                        print("DICTIONARY : \(dictionary)")
                        if let dict = dictionary {
                            print(dict["alert_message"] as? String)
                            // ..... and so on
                        }
                    } catch let error as NSError {
                        print("Error: \(error)")
                    }
                }
            } 

关于ios - 无法访问 [AnyHashable :Any] - Swift 4 类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51472321/

相关文章:

ios - 根据 UICollectionView 中 url 的 json 响应从应用程序内添加图像

ios - 将许可协议(protocol)添加到您的 iOS 应用程序

iphone - 提醒应用程序 - 重复某个提醒

swift - 无法在 iOS 15 中隐藏 ARSLineProgress

swift - 未加载 Assets 文件夹中的 HEIC 图像

android - 无法启动 GCM Intent 服务

iphone - 如何使用 fb ://url 从其他应用程序打开 iphone fb 应用程序中的照片

swift - AVPlayer:无法播放()mpg 视频

android - Android 和 iOS 之间关于数据消息的 FCM 差异

php - Apple 不保证推送的交付?