这是我的代码。
我有一个模型,它包含另一个模型的数组。
class MyModel{
var arrSubModel = [SubModel]()
}
class SubModel{
var value1 = String()
var value2 = String()
}
现在我的班级里有2个变量用于保存MyModel数组。
class MyVC:UIViewController {
var arrMyModel = [MyModel1,MyModel2,MyModel3]
var arrFilterModel = []
func filter() {
arrFilterModel = []
for model in arrMyModel {
for subModel in model.arrSubModel {
if conditionMet {
//doNothing
} else {
//remove that subModel
model.arrSubModel.removeObject(subModel)
}
}
arrFilterModel.append(model)
}
}
}
但是当我再次访问arrMyModel
时,arrSubModel
会被删除,但只能从arrFilterModel
中删除。
我想我做错了什么。 希望你们能帮忙。
谢谢。
答案 0 :(得分:0)
如果您更明确地表达了您的意图,这个问题会更容易回答
根据我可以收集的内容,您希望arrFilterModel
根据某些条件设置为arrMyModel
的子集,而不会影响原始arrMyModel
。
有一种更简单的方式来做你正在尝试做的事情:
func giveMeABetterName() { //don't call it "filter", it's meaningless.
let copy = arrMyModel
let arrFilterModel = copy.map{$0.arrSubMode}.filter{$0 == foo} //substitute in the condition
}
我建议您将此更改为不滥用对象状态,并改为使用params / return:
func giveMeABetterName(source: [MyModel]) -> [SubModel] {
return source.map{$0.arrSubMode}.filter{$0 == foo} //substitute in the condition
}
您还会遭受来自类的引用语义的无意数据共享。切换到结构的值语义将解决这个问题。