Arrays 更改数组中的一个元素将更改数组中的所有元素
我是Swift新手,我正试图搞乱一些UITableView和数组 我有一个类型为Arrays 更改数组中的一个元素将更改数组中的所有元素,arrays,swift,Arrays,Swift,我是Swift新手,我正试图搞乱一些UITableView和数组 我有一个类型为[Day]的数组,名为daysArray。 我正在ViewDidLoad()中启动数组,daysArray中有7个“天” 此外,我还有UITableView,其中填充了daysArray。 当我尝试更改一天(数组中的一个元素)时,整个天数组天都会更改,因此UITableView中的所有单元格都是相同的。 这太奇怪了,我真的不知道怎么了 日间课程: import Foundation class Day {
[Day]
的数组,名为daysArray
。
我正在ViewDidLoad()
中启动数组,daysArray
中有7个“天”
此外,我还有UITableView
,其中填充了daysArray
。
当我尝试更改一天(数组中的一个元素)时,整个天数组天都会更改,因此UITableView
中的所有单元格都是相同的。
这太奇怪了,我真的不知道怎么了
日间课程:
import Foundation
class Day {
private var _name: String!
private var _starts: Double!
private var _ends: Double!
var name: String! {
get {
if _name == nil {
_name = "Sunday"
}
return _name
}
set {
_name = newValue
}
}
var starts: Double! {
get {
if _starts == nil {
_starts = 8.00
}
return _starts
}
set {
_starts = newValue
}
}
var ends: Double! {
get {
if _ends == nil {
_ends = 20.00
}
return _ends
}
set {
_ends = newValue
}
}
init(dayDict: Dictionary<String, AnyObject>) {
if let dictName = dayDict["name"] as! String! {
self._name = dictName
}
if let dictIsWorking = dayDict["isWorking"] as! Bool! {
self._isWorking = dictIsWorking
}
if let dictStarts = dayDict["starts"] as! Double! {
self._starts = dictStarts
}
if let dictEnds = dayDict["ends"] as! Double! {
self._ends = dictEnds
}
}
}
changeArray中的print命令打印以下内容:
Each day in the array starts at: 6.0
Each day in the array starts at: 6.0
Each day in the array starts at: 6.0
Each day in the array starts at: 6.0
Each day in the array starts at: 6.0
Each day in the array starts at: 6.0
Each day in the array starts at: 6.0
就像我说的,非常非常特别。。。
感谢您阅读我的问题,当然也感谢您的回答(:Swift中的类是通过引用传递的。这意味着数组中的每个项目都指向同一个对象。因此,当您更新一个项目时,您将更新所有项目
尝试使用结构而不是类来执行此操作,您将看到不同之处
有关更好的解释和背后的推理,请参见此部分。在循环中,使用相同的引用实例化对象。
您必须替换:
let generalDay: Day = someDay
据此:
let generalDay = Day(dayDict: GeneralDayDict)
然后您将能够单独更改generalDay的属性将日期类别设置为NSObject
class Day : NSObject {
}
for i in 0...6 {
let generalDay: Day = someDay
daysArray.append(generalDay.copy())
}
然后只需附加generalDay对象的副本
希望它有帮助!!或者为每个附加创建一个新对象:daysArray.append(Day(dayDict:GeneralDayDict))
我会读到的,但是现在,下面的Maxime答案似乎解决了我的问题。无论如何,谢谢!!!!
class Day : NSObject {
}
for i in 0...6 {
let generalDay: Day = someDay
daysArray.append(generalDay.copy())
}