我在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
}
}
使用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
}
对于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