15.3 Swift集合类的拷贝

本文通过实例演示了Swift中不同类型的集合(如Array和Dictionary)进行赋值操作时的深拷贝特性,以及OC集合NSMutableArray赋值时的浅拷贝行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        /**

         集合类的拷贝操作

         */

        

        var array: Array<Int> = [1, 2, 3]

        var array1 = array

        

        

        /**

         public struct Array<Element> 

         我们点击安住Command 点击String可以看到是 结构体类型,值类型

         值类型的赋值操作是深拷贝,

         */

        

        array1 += [4, 5, 6]

        

        print("array==\(array)")

        print("array1==\(array1)")

        

        /**

         array==[1, 2, 3]

         array1==[1, 2, 3, 4, 5, 6]

         

         我们可以看到改变array1后,array并没有被改变啊。

         所以上面是深拷贝。

         

         */

        

        

        

        

        

        

        

        

        

        

        

        

        var dict: Dictionary<Int, String> = [1 : "a", 2 : "b"]

        var dict1 = dict

        

        

        /**

         public struct Dictionary<Key : Hashable, Value> : Collection

         

         我们点击安住Command 点击Dictionary可以看到是 结构体类型,值类型

         值类型的赋值操作是深拷贝,

         */

        

        

        print("------------------------>")

        dict1[3] = "c"

        

        print("dict1==\(dict1)")

        print("dict==\(dict)")

        /**

         dict1==[2: "b", 3: "c", 1: "a"]

         dict==[2: "b", 1: "a"]

         

         我们可以看到改变dict1后,dict并没有被改变啊。

         所以上面是深拷贝。

         */

        

        

        

        

        

        

        

        

        print("------------------------>")


        var ocArray: NSMutableArray = NSMutableArray.init(array: [1, 2, 3])

        

        /**

         open class NSMutableArray : NSArray

         

         我们点击安住Command 点击NSMutableArray可以看到是 class类型,引用类型

         类,引用类型 的赋值操作是浅拷贝

         */


        

        var ocArray1 = ocArray

        

        ocArray1.add(7)

        

        print("ocArray1==\(ocArray1)")

        print("ocArray==\(ocArray)")


        /**

         ocArray1==(

         1,

         2,

         3,

         7

         )

         ocArray==(

         1,

         2,

         3,

         7

         )

         

         改变ocArray1后,ocArray也改变了,是浅拷贝。

         */


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值