问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在swift中实现数组的深拷贝

发布网友 发布时间:2022-12-10 03:45

我来回答

1个回答

热心网友 时间:2024-12-04 22:20

在Objective-C中如果想将一个数组赋值给另外一个数组,同时想让两个数组之间相互独立(即改变其中的一个数组,不影响另外的一个),有很多的办法,比如我们可以直接copy,用类方法创建新数组。这样得到的数组和原来的数组就是两个完全独立的数组了,即使数组中的元素是对象。

在swift中情况和Objective-C中稍有不同,根据官方文档的介绍

即,如果数组中的元素是整形,字符串,结构体等简单数据类型,那么当你将一个数组赋值给另外的数组时,数组中的元素会被拷贝一份,两个数组中的元素相互独立。

而如果数组中的元素是类的实例,那么会有些不同

即,当数组的元素是类的实例时,简单的将一个数组赋值给另外的数组后,由于两个数组中元素所引用的对象相同,当你改变其中一个数组中元素的属性时,另外的数组中同样引用的元素对应的属性也会随之改变,除非数组中的元素只想不同的类的实例

由于这样的特性就会产生一些问题,比如从页面1中将一个含有特定类实例的数组传递给第二个页面,在第二个页面中对这个数组中的某些元素的属性进行了更改,那么就会影响到第一个页面的对应数组中的该元素,常见的场景就是含有model的数组的传递。

根据官方文档介绍由于swift加强了结构体的功能,同时数组中元素如果是结构体的话,会自动进行拷贝(前面说过),所以遇到这种情况如果可以用结构体的话就不要用类(但是结构体有时确实很不方便呀,不太习惯创建model的时候用结构题呀)。

在Model类中遵守Coping协议,同时实现对应的方法,具体如下:

这样Model的实例就可以调用copy方法来拷贝一个新的对象了,如果对于数组来说就这样:

在copyPlantsArr中就是拷贝后的新的数组,两个数组之间相互独立(办法有点麻烦😭),也可以将上一步替换为给数组增加扩展(这个没有亲自试过)

上面就是我找到swift中实现数组的深拷贝的办法了,总感觉有点麻烦,希望有知道更简单,好用办法的兄弟给我留言,谢谢。

希望我的文章对你有帮助,努力,坚持,与君共勉。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
宁波社保卡办理需要什么材料 宁波社保卡如何申领 有什么高性价比的隔离霜可以推荐? 防晒效果好的隔离霜有哪些值得入手? 下雨天经常爬在房子墙上的那种软体动物,不是蜗牛没壳的,可以在墙上把身... 原来是美男啊里面插曲、主题曲都有哪些? 请问下各位大虾,我在外地用外地农行卡网上转账到本地邮政卡星期六转账的... 为什么用支付宝买东西明明我余额足够,付款时却说我余额不足?2个... 萍乡烛式过滤器品牌 衡水烛式过滤器品牌推荐 Swift4.2~数组和字典(Array, Dictionary)基本类型转换 迟到的Swift入门 - 数组操作 swift删除数组中的元素 swift中数组操作 swift 怎么去除数组重复元素 Swift 数组删除元素 Swift 数组去重的最佳方案 004.ARM指令之LDR 我姓陆,希望给女儿起个名字,希望带伦字 求好听的名字伦*桐 在*里填上字让名字好听 伦在前面加什么字好听 战区2有辅助瞄准吗 微乐麻将有没有辅助 百战沙城H5有辅助没 公司账户进账100万交多少税 公司100万收入要交多少税 ...器但是水烧开后在水面上总是有一层像油膜一样的东西,不知道是什么... 为什么我的平板电脑玩植物大战僵尸2一点进暑假活动就闪退? 在安卓系统的平板电脑上能玩植物大战僵尸2吗? 怎样把平板电脑上的植物大战僵尸2的存档转移到手机上? swift4.0 数组Array,集合Set和字典Dictionary Swift数组高阶函数 女人洒脱大气的句子 简单快乐做好自己! 潘朵拉之心全部背景音乐 先锋2000打碟机开机出现e8709?是怎么回事?求高手解答谢谢 先锋2000打碟机屏幕花屏并一直重启 谁能介绍几个好一点的游戏论坛!? 制作学生会工作证需要版权么 怎么制作学生会工作证? 枯叶龟能长多大,多大能分公母 水库边拾到一只乌龟,重12斤 求高人指点这个龟年龄与品种!!! jupyter自启动脚本 python print不输出怎么回事 魔兽争霸3 安装了1.26 剑心 补丁 怎么玩不了自定义游戏了 一点自定义... 魔兽争霸3 冰封王座 1.20E剑心补丁中安装时说含地图编辑器免CD补丁,是... 《承蒙时光不负你》txt下载在线阅读全文,求百度网盘云资源 ...you are going to visit is the ruins (废墟) of the World Trade C... ...of many difficulties , he ___save the boy from the ruins... ...had found the actual place where the ruins of Troy 承蒙时光不弃,赐我一路荆棘