(iOS 10,Swift 3)从CloudKit通知中读取`userInfo`字典:如何将`[AnyHashable:Any]`转换为`[String:NSObject]`?

时间:2016-08-29 21:02:19

标签: notifications cloudkit swift3 ios10

背景

我正在尝试从我的应用代表中加载userInfo的{​​{1}}字典。

然后我需要将application:didReceiveRemoteNotification:userInfo:fetchCompletionHandleruserInfo投射到[AnyHashable:Any],以便我可以在CloudKit的[String:NSObject]中使用它。

问题

当我这样做时:

CKNotification:fromRemoteNotificationDictionary

我收到错误:

let ui = userInfo as! [String : NSObject]

有没有更好的方法将'[AnyHashable:Any]' is not convertible to '[String:NSObject]' 转换为合适的类型,还是我处于完全错误的轨道?

3 个答案:

答案 0 :(得分:5)

您只需先将其强制转换为NSDictionary,然后将其转换为[String: NSObject]

试试这样:

CKNotification(fromRemoteNotificationDictionary: userInfo as NSDictionary as! [String: NSObject])

答案 1 :(得分:0)

NSString.localizedStringWithFormat("%@",(notification.userInfo as! [String: AnyObject] as! [String : NSObject])["theKeyValue"]!)

这就是我获得字符串的方式。随意纠正它。

答案 2 :(得分:-1)

正如所建议的那样,取消所有强制转换并使用userInfo就足以让Swift 3正确处理。