做网站烧钱吗,短租房网站哪家做最好,建新建设集团有限公司网站,营销自动化名词解释在Objective-C中如果想将一个数组赋值给另外一个数组#xff0c;同时想让两个数组之间相互独立(即改变其中的一个数组#xff0c;不影响另外的一个)#xff0c;有很多的办法#xff0c;比如我们可以直接copy,用类方法创建新数组。这样得到的数组和原来的数组就是两个完全独…在Objective-C中如果想将一个数组赋值给另外一个数组同时想让两个数组之间相互独立(即改变其中的一个数组不影响另外的一个)有很多的办法比如我们可以直接copy,用类方法创建新数组。这样得到的数组和原来的数组就是两个完全独立的数组了即使数组中的元素是对象。在swift中情况和Objective-C中稍有不同根据官方文档的介绍Paste_Image.png1即如果数组中的元素是整形字符串结构体等简单数据类型那么当你将一个数组赋值给另外的数组时数组中的元素会被拷贝一份两个数组中的元素相互独立。var numbers [1, 2, 3, 4, 5]var numbersCopy numbersnumbers[0] 100print(numbers)// Prints [100, 2, 3, 4, 5]print(numbersCopy)// Prints [1, 2, 3, 4, 5]而如果数组中的元素是类的实例那么会有些不同Paste_Image.png2即当数组的元素是类的实例时简单的将一个数组赋值给另外的数组后由于两个数组中元素所引用的对象相同当你改变其中一个数组中元素的属性时另外的数组中同样引用的元素对应的属性也会随之改变除非数组中的元素只想不同的类的实例// An integer type with reference semanticsclass IntegerReference {var value 10}var firstIntegers [IntegerReference(), IntegerReference()]var secondIntegers firstIntegers// Modifications to an instance are visible from either arrayfirstIntegers[0].value 100print(secondIntegers[0].value)// Prints 100// Replacements, additions, and removals are still visible// only in the modified arrayfirstIntegers[0] IntegerReference()print(firstIntegers[0].value)// Prints 10print(secondIntegers[0].value)// Prints 100由于这样的特性就会产生一些问题比如从页面1中将一个含有特定类实例的数组传递给第二个页面在第二个页面中对这个数组中的某些元素的属性进行了更改那么就会影响到第一个页面的对应数组中的该元素常见的场景就是含有model的数组的传递。解决办法1根据官方文档介绍由于swift加强了结构体的功能同时数组中元素如果是结构体的话会自动进行拷贝(前面说过)所以遇到这种情况如果可以用结构体的话就不要用类(但是结构体有时确实很不方便呀不太习惯创建model的时候用结构题呀)。解决办法2在Model类中遵守Coping协议同时实现对应的方法具体如下protocol Copying {init(original: Self)}extension Copying {func copy() - Self {return Self.init(original: self)}}class Model: NSObject, Copying {required init(original: Model) {//Model的属性planId original.planIdselectName original.selectName}}这样Model的实例就可以调用copy方法来拷贝一个新的对象了如果对于数组来说就这样var modelArr [model0, model1,model2,model3,]var copyPlantsArr [Model]()for model in modelArr {let copyModel model.copy()copyPlantsArr.append(copyModel)}在copyPlantsArr中就是拷贝后的新的数组两个数组之间相互独立(办法有点麻烦)也可以将上一步替换为给数组增加扩展(这个没有亲自试过)extension Array where Element: Copying {func clone() - Array {var copiedArray Array()for element in self {copiedArray.append(element.copy())}return copiedArray}}上面就是我找到swift中实现数组的深拷贝的办法了总感觉有点麻烦希望有知道更简单好用办法的兄弟给我留言谢谢。希望我的文章对你有帮助努力坚持与君共勉。