Arrays 更改数组中的一个元素将更改数组中的所有元素

Arrays 更改数组中的一个元素将更改数组中的所有元素,arrays,swift,Arrays,Swift,我是Swift新手,我正试图搞乱一些UITableView和数组 我有一个类型为[Day]的数组,名为daysArray。 我正在ViewDidLoad()中启动数组,daysArray中有7个“天” 此外,我还有UITableView,其中填充了daysArray。 当我尝试更改一天(数组中的一个元素)时,整个天数组天都会更改,因此UITableView中的所有单元格都是相同的。 这太奇怪了,我真的不知道怎么了 日间课程: import Foundation class Day {

我是Swift新手,我正试图搞乱一些UITableView和数组

我有一个类型为
[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())

    }