我检查我是否有用户的 Facebook 数据作为 UserDefaults.standard.value
if let facebookDetails:Dictionary = (UserDefaults.standard.value(forKey: "facebookDetails") as? [String:Any])! {
dump(facebookDetails)
let picture:Dictionary = (facebookDetails["picture"] as? [String:Any])!
let fb_pic_data:Dictionary = (picture["data"] as? [String:Any])!
let fb_pic_data_url:String = fb_pic_data["url"] as! String
if let checkedUrl = URL(string: fb_pic_data_url) {
profiler.contentMode = .scaleAspectFit
downloadImage(url: checkedUrl)
profiler.layer.borderWidth = 1
profiler.layer.masksToBounds = false
profiler.layer.borderColor = UIColor.black.cgColor
profiler.layer.cornerRadius = profiler.frame.height/2
profiler.clipsToBounds = true
}
}
我收到以下警报: 类型为“[String: Any]”的非可选表达式用于检查可选值
如果未设置 UserDefaults.standard.value(forKey: "facebookDetails"),应用程序会崩溃。
这个条件 if 的正确写法是什么?
谢谢
最佳答案
您完全滥用了可选值、强制解包和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
为什么要采用两种不同的方法来强制大小写和可选?
关于ios - 检查可选的 UserDefaults.standard.value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46255284/