【问题标题】:when using .append() in swift 3, the element in the array gets replaced instead of the array gaining new element在 swift 3 中使用 .append() 时,数组中的元素被替换,而不是数组获得新元素
【发布时间】:2017-02-26 20:08:25
【问题描述】:

背景信息:此应用程序扫描颜色,然后,如果用户愿意,使用 UserDefaults 将颜色保存到 UITableView。这里的变量是程序前面使用的算法的副产品。

当我查看表格时,我保存的不是新元素,而是被替换。

这是代码,我正在尝试将其保存到 userdefaults,但我认为 userdefaults 不是问题。

这些是预定义的数组。他们不属于班级。

var NameList = [String]()
var HexCodeList = [String]()
var RedList = [CGFloat]()
var BlueList = [CGFloat]()
var GreenList = [CGFloat]()

这是将变量添加到其相应数组并将它们保存为用户默认值的函数。这是视图控制器类的一部分

@IBAction func SaveColor(_ sender: Any) {

    let alertController = UIAlertController(title: "Save Color", message: "Please name the color you would like to save:", preferredStyle: .alert)

    let confirmAction = UIAlertAction(title: "Confirm", style: .default) { (_) in
        if let field = alertController.textFields?[0] {
            // store your data
            //ColorList.append(Color(name: field.text!, hexCode: self.hexCode, Red: self.Red, Green: self.Green, Blue: self.Blue))
            //UserDefaults.standard.set(ColorList, forKey: "ColorList")



            NameList.append(field.text!)
            UserDefaults.standard.set(NameList, forKey: "NameList")

            HexCodeList.append(self.hexCode)
            UserDefaults.standard.set(HexCodeList, forKey: "HexCodeList")

            RedList.append(self.Red)
            UserDefaults.standard.set(RedList, forKey: "RedList")

            GreenList.append(self.Green)
            UserDefaults.standard.set(GreenList, forKey: "GreenList")

            BlueList.append(self.Blue)
            UserDefaults.standard.set(BlueList, forKey: "BlueList")

            UserDefaults.standard.synchronize()

            print("NameList - 2nd", NameList)

        } else {
            // user did not fill field
        }
    }

我很确定这是所有重要的代码,但如果您需要更多帮助我,我很乐意将其全部发布

非常感谢

【问题讨论】:

  • 您尝试过建议的答案吗?

标签: ios arrays swift3


【解决方案1】:

问题是您每次都在定义部分创建新列表

 var NameList = [String]() // Nothing here!

比使用.appendsomething 添加到[] 数组,而不是将[something] 保存到UserDefaults。这会用[something] 覆盖默认保存的任何进度。

要保存进度,您需要正确初始化存储属性

lazy var NameList: [String] = UserDefaults.standard.array(forKey: "NameList") as? [String] ?? [String]()

此示例代码从 UserDefaults 中检索 NameList 或将其初始化为空字符串数组(如果没有保存为默认值)。将此 sn-p 用于所有列表。希望这会有所帮助。

附:根据common naming conventions,最好将变量命名为小写,例如 nameList 等。

【讨论】:

    猜你喜欢
    • 2021-09-08
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 2014-12-19
    • 2017-05-14
    • 2013-07-04
    • 2019-04-21
    • 2019-12-20
    相关资源
    最近更新 更多