无用户缺省值(Swift 5)

问题描述 投票:0回答:2

我在UserDefaults中存储了一张图像,但是直到用户设置它为止,UserDefaults为空。我需要检查

如果UserDefaults为空,则为空白。

现在安装新的应用程序,直到用户将图像设置为UserDefaults,应用程序崩溃。

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

我只学了一个月的快速知识,而我陷于这种情况。

这里是我的代码:

 //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
     }
 }
swift userdefaults
2个回答
1
投票

使用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
    }

1
投票

对于Swift 4.2,迅速5 +

写一个类似的类:

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

© www.soinside.com 2019 - 2024. All rights reserved.