Swift - 如果让我崩溃

时间:2016-03-01 16:02:52

标签: swift

我尝试使用推送通知 - 我监视有效负载中的变量,如果它存在,我执行我的东西。这很好,但问题是,如果我没有变量,即使我使用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中存在密钥,则一切正常。但如果不是 - 应用程序崩溃。怎么避免这个?

1 个答案:

答案 0 :(得分:3)

你编码的是userInfo字典中肯定有密钥,你需要使用吗?查询是否存在,否则当密钥不存在时会崩溃并尝试使用你的nil密钥变量。

if let key : String = userInfo["custom"]?["a"]??["d"] as? String  {
    print("key was received")
}

可选项的概念是避免在运行时访问nil对象的问题。那么如果让someObject =某事为? someType有助于防止这种情况发生。因此,它对程序控制之外的动态数据很有帮助,例如: JSON响应。