ios - 检查可选的 UserDefaults.standard.value

标签 ios swift nsuserdefaults

我检查我是否有用户的 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/

相关文章:

iphone - 你如何在 NSUserDefaults 中存储多个 UIControlState 实例?

ios - 信标管理器 didenter didexit 区域方法被重复调用

iphone - 如何确定 NSURLConnection 是否为 :sendSynchronousRequest is returning cached data or not

ios - XCode 总是忘记导入的框架

ios - 无法识别的选择器发送到实例 NSTimer Swift

ios - 由于NSUserDefaultsDidChangeNotification,UI在后台线程上发生了变化

IOS Collection View 布局问题

swift - 在 Swift 中比较字符串对象

swift - 在 Swift 中构建字典扩展以作为值附加到数组

objective-c - NSHTTPCookieStorage VS 钥匙串(keychain) VS NSUserdefault