swift ios 如何快速访问 AnyHashable 数据

5 hash ios swift

如何快速访问任何 AnyHashable 数据我在下面有我的数据,下面是我单击通知时的日志。当我单击 notif 和数据记录时,我想打印或获取它,以便我可以将其加载到视图中。它已经在工作,当我点击通知时它会记录,如果我想要的是如何让它在视图中加载。

我做了什么

 guard
            let aps = userInfo[AnyHashable("aps")] as? NSDictionary,
            let alert = aps["alert"] as? NSDictionary,
            let body = alert["body"] as? String,
            let title = alert["title"] as? String
            else {
                return
        }

        print("Title: \(title) \nBody:\(body)")

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Run Code Online (Sandbox Code Playgroud)

数据

[AnyHashable("aps"): {
    alert =     {
        body = "yuuu - 5.00";
        title = "New Chore!";
    };
    "content-available" = 1;
}, AnyHashable("data"): {
    chore =     {
        desc = huu;
        name = yuuu;
        pk = 125;
        reward = "5.00";
        sched = "2018-04-12T09:52:13+08:00";
    };
    "notification_id" = 16;
    pusher =     {
        publishId = "pubid-01ff965a-20af-4a58-9901-89782043d832";
    };
}]
Run Code Online (Sandbox Code Playgroud)

Abh*_*ore 8

您可以尝试:

Swift 5+ 更新:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
    guard let arrAPS = userInfo["aps"] as? [String: Any] else { return }
    if application.applicationState == .active{
        guard let arrAlert = arrAPS["alert"] as? [String:Any] else { return }

        let strTitle:String = arrAlert["title"] as? String ?? ""
        let strBody:String = arrAlert["body"] as? String ?? ""

        let alert = UIAlertController(title: strTitle, message: strBody, preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Ok", style: .default) { action in
            print("OK Action")
        })
        self.window?.rootViewController?.present(alert, animated: true)
    } else {
        guard let arrNotification = arrAPS["notification"] as? [String:Any] else { return }
        guard let arrAlert = arrNotification["alert"] as? [String:Any] else { return }

        let strTitle:String = arrAlert["title"] as? String ?? ""
        print("Title --", strTitle)
        let strBody:String = arrAlert["body"] as? String ?? ""
        print("Body --", strBody)
    }
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特2+:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

    guard let dictAPS = userInfo["aps"] as? NSDictionary else { return }

    if application.applicationState == .active{
        let title = dictAPS.value(forKeyPath: "alert.title")
        let body = dictAPS.value(forKeyPath: "alert.body")
        let alert = UIAlertController(title: "\(title!)", message: "\(String(describing: body))", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Ok", style: .default) { action in
                   })
        self.window?.rootViewController?.present(alert, animated: true)
    }else{
        guard let dictNoti = dictAPS.value(forKey: "notification") as? NSDictionary else { return }
        let title = dictNoti.value(forKeyPath: "alert.title")
        print(title)
        let body = dictNoti.value(forKeyPath: "alert.body")
        print(body)
    }
}
Run Code Online (Sandbox Code Playgroud)