nil 检查用户默认值 (Swift 5)

nil Check in User Defaults (Swift 5)

我在 UserDefaults 中存储了一张图像,但在用户设置它之前,UserDefaults 是空的。我需要检查

如果 UserDefaults 为空,如果为空,则显示图像。

现在,在用户将图像设置到 UserDefaults 之前,在全新安装的应用程序中,应用程序崩溃了。

UserDefaults 中设置图像后,我的解码工作正常,只是检查 nil 的代码有问题。

我才学swift一个月,就卡在了这个场景中。

这是我的代码:

 //Image Decode
 let Data = UserDefaults.standdard.object(forKey: "savedImage" as! NSData){

    if (Data as Data?) != nil {

      //display Image
       dogImageView.image = UIImage(data: Data as Data)

     }else {
         dogImageView.image = Image Literal
     }
 }

使用 If-let 安全地解包可选。

    if let data = UserDefaults.standard.data(forKey: "savedImage") { // image is present 
        dogImageView.image = UIImage(data: data)
    } else { // image is not present. set a default image
        dogImageView.image = Image Literal
    }

对于swift4.2,swift5+

写一个class喜欢:

import Foundation

public class PreferencesUtils {

    private init() {

    }

    public static func setBoolData(boolValue: Bool, dataName: String) {
        UserDefaults.standard.set(boolValue, forKey: dataName)
    }

    public static func getBoolData(dataName: String)-> Bool{

        let defaults = UserDefaults.standard

        if(defaults.value(forKey: dataName) != nil) {
            return defaults.value(forKey: dataName)! as! Bool

        } else {
            return false
        }
    }

    public static func saveStringData(data: String, dataName: String){
        let preferences = UserDefaults.standard
        preferences.set(data, forKey: dataName)
        let didSave = preferences.synchronize()
        if !didSave {
            debugPrint("Not saved yet")
        }
    }

    public static func getSavedStringData(dataName: String)-> String{
        let defaults = UserDefaults.standard
        if(defaults.value(forKey: dataName) != nil){
            return defaults.value(forKey: dataName) as! String
        } else {
            return ""
        }
    }

    public static func saveIntData(data : Int, dataName: String){
        let preferences = UserDefaults.standard
        preferences.set(data, forKey: dataName)
        let didSave = preferences.synchronize()
        if !didSave {
            debugPrint("Not saved yet")
        }
    }

    public static func getSavedIntData(dataName: String) -> Int {
        let defaults = UserDefaults.standard
        if(defaults.value(forKey: dataName) != nil){
            return defaults.value(forKey: dataName) as! Int
        }else{
            return 0
        }
    }

}

用法:

使用以下行将您的数据保存在首选项中:

PreferencesUtils.saveStringData(data: "YOUR_DATA", dataName: "YOUR_KEY")

并获取此保存的数据:

PreferencesUtils.getSavedStringData(dataName: "YOUR_KEY")

或者检查这个库: Link