我尝试使用推送通知 - 我监视有效负载中的变量,如果它存在,我执行我的东西。这很好,但问题是,如果我没有变量,即使我使用if let
绑定,我也会崩溃。
方法看起来像这样
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
if let key : String = userInfo["custom"]!["a"]!!["d"] as! String {
print("key was received")
}
completionHandler(.NewData)
}
如果userData中存在密钥,则一切正常。但如果不是 - 应用程序崩溃。怎么避免这个?
答案 0 :(得分:3)
你编码的是userInfo字典中肯定有密钥,你需要使用吗?查询是否存在,否则当密钥不存在时会崩溃并尝试使用你的nil密钥变量。
if let key : String = userInfo["custom"]?["a"]??["d"] as? String {
print("key was received")
}
可选项的概念是避免在运行时访问nil对象的问题。那么如果让someObject =某事为? someType有助于防止这种情况发生。因此,它对程序控制之外的动态数据很有帮助,例如: JSON响应。