代码之家  ›  专栏  ›  技术社区  ›  Saurabh Divesh singh

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

  •  0
  • Saurabh Divesh singh  · 技术社区  · 6 年前

    我试图从类型为[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"}]
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Saurabh Divesh singh    6 年前

    我解决了这个问题,因为我收到的信息类型是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)")
                        }
                    }
                } 
    
        2
  •  1
  •   piet.t Charis A.    5 年前

    从[AnyHashable(“gcm.notification.data”)]获取数据

    if let aps = userInfo["aps"] as? NSDictionary, let notificationData = userInfo["gcm.notification.data"] as? NSString {
    
              var dictonary:NSDictionary?
                if let data = notificationData.data(using: String.Encoding.utf8.rawValue) {
                    do {
                        dictonary = try JSONSerialization.jsonObject(with: data, options: []) as? NSDictionary
    
                        if let alertDictionary = dictonary {
                            print(alertDictionary)
                        }
                    } catch{
                        print(error)
                    }
    
    推荐文章