有时 类 对待 swift 中的类似结构?

Sometimes Classes treat like structures in swift?

例如:- 在 class DishPostedVC 中,我有一个模型数组:- var finalDatesOfDish : [DishActivationDateTimeModel]?

如果我将此变量 (finalDatesOfDish) 传递给 class DishActivationVC,并在 class DishActivationVC 中执行一些删除操作,如果我再次返回到 class DishPostedVC,那么我删除后得到的数据不是实际数据,但我只是回来而不传递任何数据。

不知道为什么,这种情况在模型数组的时候又发生过一次,好奇怪,怎么可能?

你能告诉我我应该做什么吗?

class DishActivationDateTimeModel {

var dayDate: Date? = nil
var dayDateStr: String = ""
var servingsLeft: String = ""
var firstSlotPostedDishId: String = ""
var secondSlotPostedDishId: String = ""

var startTimeDateForFirstSlot: Date? = nil
var startTimeStringForFirstSlot: String = ""
var endTimeDateForFirstSlot: Date? = nil
var endTimeStringForFirstSlot: String = ""

var startTimeDateForSecondSlot: Date? = nil
var startTimeStringForSecondSlot: String = ""
var endTimeDateForSecondSlot: Date? = nil
var endTimeStringForSecondSlot: String = ""
}

这是我的模特

  class DishActivationDateTimeModel {

    var dayDate: Date? = nil
    var dayDateStr: String = ""
    var servingsLeft: String = ""
    var firstSlotPostedDishId: String = ""
    var secondSlotPostedDishId: String = ""

    var startTimeDateForFirstSlot: Date? = nil
    var startTimeStringForFirstSlot: String = ""
    var endTimeDateForFirstSlot: Date? = nil
    var endTimeStringForFirstSlot: String = ""

    var startTimeDateForSecondSlot: Date? = nil
    var startTimeStringForSecondSlot: String = ""
    var endTimeDateForSecondSlot: Date? = nil
    var endTimeStringForSecondSlot: String = ""

    init(_ object : DishActivationDateTimeModel) {
        self.dayDate = object.dayDate
        self.dayDateStr = object.dayDateStr
//        ....
//        ....
        self.endTimeStringForSecondSlot = object.endTimeStringForSecondSlot
    }
}
extension Array where Element : DishActivationDateTimeModel {

    func copyModelArray() -> [DishActivationDateTimeModel] {
        var array : [DishActivationDateTimeModel] = []
        for object in self {
            array.append(DishActivationDateTimeModel(object))
        }
        return array
    }
}

如果您不想更改您的主要数据,请复制您的 使用 copyModelArray 方法的模型数组。并使用您的操作 模型数组。因此,它不会影响您的主模型数据数组。

在 Swift 结构和 类 中,为您的对象提供基于值和基于引用的结构。结构是为数据存储而设计的对象的首选,例如 Array。在多线程环境中传递对象时,结构还有助于消除内存问题。 类,不像结构体,支持继承,更多用于包含UIViewController等逻辑。 Swift 中的大多数标准库数据对象,如 String、Array、Dictionary、Int、Float、Boolean,都是结构,因此也是值对象。 var 与 let 的可变性是为什么在 Swift 中没有像 Objective C 的 NSArray 和 NSMutableArray 这样的集合的可变和非可变版本。

当你传递你的结构时,它被复制了,但是当你传递或分配 classes 时,它会引用 it.This 意味着当你在一个位置更改 class 对象时,它会随处更改,当您影响结构时,它会单独更改。如果您想了解 classes 和结构之间的更多信息差异,您可以查看我的文章。 classes versus structs