用户默认 swift 4
UserDefaults swift 4
我对 UserDefaults 有疑问。
import Foundation
class Utility: NSObject {
func storeBaseDetail(firstname:String,lastname:String,picStr:String,email:String,usrname:String,user_Id:String) {
UserDefaults.standard.set(firstname, forKey: "firstname")
UserDefaults.standard.set(lastname, forKey: "lastname")
UserDefaults.standard.set(picStr, forKey: "picStr")
UserDefaults.standard.set(email, forKey: "email")
UserDefaults.standard.set(usrname, forKey: "usrname")
UserDefaults.standard.set(user_Id, forKey: "id")
UserDefaults.standard.synchronize()
}
func getBaseDetail()->(firstName:String,lastName:String,picStr:String,email:String,usrname:String,user_Id:String){
return ((UserDefaults.standard.value(forKey: "firstname") as! String),(UserDefaults.standard.value(forKey: "lastname") as! String),(UserDefaults.standard.value(forKey: "picStr") as? String)!,(UserDefaults.standard.value(forKey: "email") as! String),(UserDefaults.standard.value(forKey: "usrname") as! String),(UserDefaults.standard.value(forKey: "id") as! String))
}
func storeBaseDetail(firstname:String,lastname:String,picStr:String,email:String,usrname:String,user_Id:String) {
UserDefaults.standard.set(firstname, forKey: "firstname")
UserDefaults.standard.set(lastname, forKey: "lastname")
UserDefaults.standard.set(picStr, forKey: "picStr")
UserDefaults.standard.set(email, forKey: "email")
UserDefaults.standard.set(usrname, forKey: "usrname")
UserDefaults.standard.set(user_Id, forKey: "id")
UserDefaults.standard.synchronize()
}
func getBaseDetail()->(firstName:String,lastName:String,picStr:String,email:String,usrname:String,user_Id:String){
return ((UserDefaults.standard.value(forKey: "firstname") as! String),(UserDefaults.standard.value(forKey: "lastname") as! String),(UserDefaults.standard.value(forKey: "picStr") as? String)!,(UserDefaults.standard.value(forKey: "email") as! String),(UserDefaults.standard.value(forKey: "usrname") as! String),(UserDefaults.standard.value(forKey: "id") as! String))
}
}
如果我称它为 UserDefaults:
if Utility().getBaseDetail().firstName != ""{
userNameLbl.text = "\(Utility().getBaseDetail().firstName) \(Utility().getBaseDetail().lastName)"
}
我收到这个错误:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
用这个改变你的功能
func getBaseDetail()->(firstName:String,lastName:String,picStr:String,email:String,usrname:String,user_Id:String){
return ((UserDefaults.standard.value(forKey: "firstname") as? String ?? ""),(UserDefaults.standard.value(forKey: "lastname") as? String ?? ""),(UserDefaults.standard.value(forKey: "picStr") as? String ?? ""),(UserDefaults.standard.value(forKey: "email") as? String ?? ""),(UserDefaults.standard.value(forKey: "usrname") as? String ?? ""),(UserDefaults.standard.value(forKey: "id") as? String ?? ""))
}
这是避免 nil 值的正确方法,
func getBaseDetail()->(firstName:String?,lastName:String?,picStr:String?,email:String?,usrname:String?,user_Id:String?){
return ((UserDefaults.standard.value(forKey: "firstname") as? String),(UserDefaults.standard.value(forKey: "lastname") as? String),(UserDefaults.standard.value(forKey: "picStr") as? String),(UserDefaults.standard.value(forKey: "email") as? String),(UserDefaults.standard.value(forKey: "usrname") as? String),(UserDefaults.standard.value(forKey: "id") as? String))
}
在其他class中创建Utility的实例,
let utilityInstance = Utility()
然后使用 if let 获取您的值,
if let emailValue = utilityInstance.getBaseDetail().email{
print(emailValue)
}
所以,如果有值就会打印,如果没有值就会跳过。
我对 UserDefaults 有疑问。
import Foundation
class Utility: NSObject {
func storeBaseDetail(firstname:String,lastname:String,picStr:String,email:String,usrname:String,user_Id:String) {
UserDefaults.standard.set(firstname, forKey: "firstname")
UserDefaults.standard.set(lastname, forKey: "lastname")
UserDefaults.standard.set(picStr, forKey: "picStr")
UserDefaults.standard.set(email, forKey: "email")
UserDefaults.standard.set(usrname, forKey: "usrname")
UserDefaults.standard.set(user_Id, forKey: "id")
UserDefaults.standard.synchronize()
}
func getBaseDetail()->(firstName:String,lastName:String,picStr:String,email:String,usrname:String,user_Id:String){
return ((UserDefaults.standard.value(forKey: "firstname") as! String),(UserDefaults.standard.value(forKey: "lastname") as! String),(UserDefaults.standard.value(forKey: "picStr") as? String)!,(UserDefaults.standard.value(forKey: "email") as! String),(UserDefaults.standard.value(forKey: "usrname") as! String),(UserDefaults.standard.value(forKey: "id") as! String))
}
func storeBaseDetail(firstname:String,lastname:String,picStr:String,email:String,usrname:String,user_Id:String) {
UserDefaults.standard.set(firstname, forKey: "firstname")
UserDefaults.standard.set(lastname, forKey: "lastname")
UserDefaults.standard.set(picStr, forKey: "picStr")
UserDefaults.standard.set(email, forKey: "email")
UserDefaults.standard.set(usrname, forKey: "usrname")
UserDefaults.standard.set(user_Id, forKey: "id")
UserDefaults.standard.synchronize()
}
func getBaseDetail()->(firstName:String,lastName:String,picStr:String,email:String,usrname:String,user_Id:String){
return ((UserDefaults.standard.value(forKey: "firstname") as! String),(UserDefaults.standard.value(forKey: "lastname") as! String),(UserDefaults.standard.value(forKey: "picStr") as? String)!,(UserDefaults.standard.value(forKey: "email") as! String),(UserDefaults.standard.value(forKey: "usrname") as! String),(UserDefaults.standard.value(forKey: "id") as! String))
}
}
如果我称它为 UserDefaults:
if Utility().getBaseDetail().firstName != ""{
userNameLbl.text = "\(Utility().getBaseDetail().firstName) \(Utility().getBaseDetail().lastName)"
}
我收到这个错误:
Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value
用这个改变你的功能
func getBaseDetail()->(firstName:String,lastName:String,picStr:String,email:String,usrname:String,user_Id:String){
return ((UserDefaults.standard.value(forKey: "firstname") as? String ?? ""),(UserDefaults.standard.value(forKey: "lastname") as? String ?? ""),(UserDefaults.standard.value(forKey: "picStr") as? String ?? ""),(UserDefaults.standard.value(forKey: "email") as? String ?? ""),(UserDefaults.standard.value(forKey: "usrname") as? String ?? ""),(UserDefaults.standard.value(forKey: "id") as? String ?? ""))
}
这是避免 nil 值的正确方法,
func getBaseDetail()->(firstName:String?,lastName:String?,picStr:String?,email:String?,usrname:String?,user_Id:String?){
return ((UserDefaults.standard.value(forKey: "firstname") as? String),(UserDefaults.standard.value(forKey: "lastname") as? String),(UserDefaults.standard.value(forKey: "picStr") as? String),(UserDefaults.standard.value(forKey: "email") as? String),(UserDefaults.standard.value(forKey: "usrname") as? String),(UserDefaults.standard.value(forKey: "id") as? String))
}
在其他class中创建Utility的实例,
let utilityInstance = Utility()
然后使用 if let 获取您的值,
if let emailValue = utilityInstance.getBaseDetail().email{
print(emailValue)
}
所以,如果有值就会打印,如果没有值就会跳过。