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