[英]Swift: How to check if UserDefaults exists and if not save a chosen 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.