有时 类 对待 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
例如:- 在 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