在 swift 3 中使用 .append() 时,数组中的元素被替换,而不是数组获得新元素
Posted
技术标签:
【中文标题】在 swift 3 中使用 .append() 时,数组中的元素被替换,而不是数组获得新元素【英文标题】:when using .append() in swift 3, the element in the array gets replaced instead of the array gaining new element 【发布时间】: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
我很确定这是所有重要的代码,但如果您需要更多帮助我,我很乐意将其全部发布
非常感谢
【问题讨论】:
您尝试过建议的答案吗? 【参考方案1】:问题是您每次都在定义部分创建新列表
var NameList = [String]() // Nothing here!
比使用.append
将something
添加到[]
数组,而不是将[something]
保存到UserDefaults。这会用[something]
覆盖默认保存的任何进度。
要保存进度,您需要正确初始化存储属性
lazy var NameList: [String] = UserDefaults.standard.array(forKey: "NameList") as? [String] ?? [String]()
此示例代码从 UserDefaults 中检索 NameList 或将其初始化为空字符串数组(如果没有保存为默认值)。将此 sn-p 用于所有列表。希望这会有所帮助。
附:根据common naming conventions,最好将变量命名为小写,例如 nameList 等。
【讨论】:
以上是关于在 swift 3 中使用 .append() 时,数组中的元素被替换,而不是数组获得新元素的主要内容,如果未能解决你的问题,请参考以下文章