检查可选的UserDefaults.standard.value

时间:2017-09-16 15:06:37

标签: ios swift nsuserdefaults

我检查用户的Facebook数据是否为UserDefaults.standard.value

<div class="pure-progress" data-progress="30%">
  <div class="pure-progress--bar" style="width:30%"></div>
</div>

我收到以下警告: 类型为&#39; [String:Any]&#39;的非可选表达式用于检查选项

如果未设置UserDefaults.standard.value(forKey:&#34; facebookDetails&#34;),

和应用程序崩溃。

编写此条件的正确方法是什么?

由于

1 个答案:

答案 0 :(得分:4)

您完全滥用了选项,强制解包和if let

您还应该避免使用value(forKey:)。并避免不必要的类型声明。让Swift在适当的时候推断出类型。

您的if应该是:

if let facebookDetails = UserDefaults.standard.dictionary(forKey: "facebookDetails") {
}

除非您确定值(或演员表)将始终成功,否则您还应该避免强行展开。

在代码中保持一致。在一行上你做了:

let picture:Dictionary = (facebookDetails["picture"]  as? [String:Any])!

和你做的另一个:

let fb_pic_data_url:String = fb_pic_data["url"] as! String

为什么采用两种不同的方法来强制案例和可选的?