簡體   English   中英

檢查可選的UserDefaults.standard.value

[英]checking for an optional UserDefaults.standard.value

我檢查是否有用戶的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的正確方法是什么?

謝謝

您完全誤用了optionals,強制展開以及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

為什么要采用兩種不同的方法來強制案例和可選案例?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM