swift UserDefaults 字典
swift UserDefaults dictionary
在代码中我有按钮和标签
我想从标签中捕获文本到 UserDefaults,但是当我在控制台打印中按 -> "nil"
btn 代码:
@IBAction func tapAddBtn(_ sender: UIButton) {
let def = UserDefaults.standard
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]]
maAr?.append(["name": self.nameLbl.text, "price": self.costLbl.text, "qty": self.quantNumberLabel.text])
def.set(maAr, forKey: "cartt")
def.synchronize()
print(UserDefaults.standard.object(forKey: "cartt"))
第一次通过这种方法,从UserDefaults
中取出键为"cartt"的数组有可能是nil
。所以如果是这样的话,那么你需要用数组来初始化这个值。
let newValues = ["name": self.nameLbl.text, "price": self.costLbl.text, "qty": self.quantNumberLabel.text]
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]]
if maAr == nil {
maAr = [newValues]
} else {
maAr?.append(newValues)
}
def.set(maAr, forKey: "cartt")
print(UserDefaults.standard.object(forKey: "cartt"))
您必须将默认值设置为 maAr
:
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? [[String: Any]]()
否则,当你点击按钮时,UserDefaults.standard.array(forKey: "cartt")
还没有设置,所以maAr
得到nil
。
之后,maAr?
不会附加任何内容,因为可选链接失败。
最后,在 def.set(maAr, forKey: "cartt")
中,您将 nil
分配回 UserDefaults
。
在代码中我有按钮和标签 我想从标签中捕获文本到 UserDefaults,但是当我在控制台打印中按 -> "nil"
btn 代码:
@IBAction func tapAddBtn(_ sender: UIButton) {
let def = UserDefaults.standard
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]]
maAr?.append(["name": self.nameLbl.text, "price": self.costLbl.text, "qty": self.quantNumberLabel.text])
def.set(maAr, forKey: "cartt")
def.synchronize()
print(UserDefaults.standard.object(forKey: "cartt"))
第一次通过这种方法,从UserDefaults
中取出键为"cartt"的数组有可能是nil
。所以如果是这样的话,那么你需要用数组来初始化这个值。
let newValues = ["name": self.nameLbl.text, "price": self.costLbl.text, "qty": self.quantNumberLabel.text]
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]]
if maAr == nil {
maAr = [newValues]
} else {
maAr?.append(newValues)
}
def.set(maAr, forKey: "cartt")
print(UserDefaults.standard.object(forKey: "cartt"))
您必须将默认值设置为 maAr
:
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? [[String: Any]]()
否则,当你点击按钮时,UserDefaults.standard.array(forKey: "cartt")
还没有设置,所以maAr
得到nil
。
之后,maAr?
不会附加任何内容,因为可选链接失败。
最后,在 def.set(maAr, forKey: "cartt")
中,您将 nil
分配回 UserDefaults
。