swift UserDefaults字典

时间:2018-04-23 13:24:54

标签: arrays swift nsuserdefaults

在代码中我有按钮和标签 我希望从标签中捕获文本到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"))

2 个答案:

答案 0 :(得分:0)

第一次通过这种方法,有可能是带有键的数组" cartt"从nil检索时为UserDefaults。因此,如果是这种情况,则需要使用数组初始化值。

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"))

答案 1 :(得分:0)

您必须将默认值设置为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