Swift 字符串、数组拷贝问题

本文只介绍 Swift 中的拷贝和 OC 中的拷贝有哪些不一样的地方,哪些需要我们注意的地方。如果你想更进一步了解深、浅拷贝问题,请点击iOS-深复制(mutableCopy)与浅复制(copy)

字符串之间拷贝

Swift 中的字符串是值类型。如果你创建了一个新的字符串,那么当其进行常量、变量赋值操作,或在函数/方法中传递时,会进行值拷贝。任何情况下,都会对已有字符串值创建新副本,并对该新副本进行传递或赋值操作。

Swift 代码:当我们改变 copyObj2 的值后,你会发现并不会影响copyObj1。

var copyObj1 = String("copyObj1")

var copyObj2 = copyObj1

copyObj2 = "copyObj2";

// copyObj2 --> copyObj2

// copyObj1 --> copyObj1

OC 代码:OC 中的字符串对象是引用类型。当我们改变 copyObj2 的值后,你会发现 copyObj1 的值也会改变。

NSString *copyObj1 = [[NSString alloc] initWithString:@"copyObj1"];

NSString *copyObj2 = copyObj1;

copyObj2 = @"copyObj2";

// copyObj2 --> copyObj2
// copyObj1 --> copyObj2

数组之间拷贝

Swift数组之间拷贝是:值拷贝

var x = [1,2,3]

var y = x

y.append(4)

// y --> [1, 2, 3, 4]

// x --> [1, 2, 3]

OC数组之间拷贝是:引用拷贝

let a = NSMutableArray(array: [1,2,3])

// 我们不想让 b 发生改变

let b: NSArray = a

// 但是事实上它依然能够被 a 影响并改变

a.insert(4, at: 3)

// b --> ( 1, 2, 3, 4 )


字典之间拷贝

Swift字典之间拷贝也是:值拷贝

var copy1 = [ "a":1.0 ]

print(copy1)->["a": 1.0]

var copy2 =copy1

print(copy1)->["a": 1.0]

print(copy2)->["a": 1.0]

copy2= [ "a":11.0 ]

print(copy1)->["a": 1.0]

print(copy2)->["a": 11.0]

你可能感兴趣的:(Swift 字符串、数组拷贝问题)