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
我在 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