首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >swift UserDefaults字典

swift UserDefaults字典
EN

Stack Overflow用户
提问于 2018-04-23 13:24:53
回答 2查看 107关注 0票数 0

在代码中,我有按钮和标签,我希望从标签捕获文本到UserDefaults,但是当我在控制台中按->时,打印“0”。

btn代码:

代码语言:javascript
复制
@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"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-23 13:32:46

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

代码语言:javascript
复制
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"))
票数 0
EN

Stack Overflow用户

发布于 2018-04-23 13:37:23

必须将默认值设置为maAr

代码语言:javascript
复制
var maAr = UserDefaults.standard.array(forKey: "cartt") as? [[String: Any]] ?? [[String: Any]]()

否则,当您单击该按钮时,UserDefaults.standard.array(forKey: "cartt")尚未设置,因此maAr get nil

之后,由于可选链接失败,maAr?不会追加任何内容。

最后,在def.set(maAr, forKey: "cartt")中将nil分配给UserDefaults

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49982306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档