Array是個結(jié)構(gòu)體滑废,就是值類型笋除,值類型傳遞傳遞的是值,修改傳遞過去的值不會改變原來的值
當(dāng)Array傳遞的時候里面的元素是如何傳遞的呢?
當(dāng)元素為值類型時是值傳遞
當(dāng)元素為引用類型時是引用傳遞
let age = 10
let arr = [age]
var testArr = arr
print("age=\(age);arr[0]=\(arr[0]);testArr[0]=\(testArr[0])")
testArr[0] = 20
print("age=\(age);arr[0]=\(arr[0]);testArr[0]=\(testArr[0])")
輸出:
age=10;arr[0]=10;testArr[0]=10
age=10;arr[0]=10;testArr[0]=20
- 當(dāng)改變引用類型的元素時八秃,兩個數(shù)組內(nèi)此元素都會改變
let person1 = Person.init();
person1.name = "張三"
person1.age = 10
let person2 = Person.init();
person2.name = "李四"
person2.age = 20
let arr = [person1,person2]
var testArr = arr;
print("arr[0]地址=\(arr[0]);testArr[0]地址=\(testArr[0])")
print("arr->person1年齡\(arr[0].age!),testArr->person1年齡\(testArr[0].age!)")
print(arr)
person1.name = "修改了"
testArr[0].age = 100
print("arr->person1姓名\(arr[0].name!),testArr->person1姓名\(testAr
[0].name!)")
print("arr->person1年齡\(arr[0].age!),testArr->person1年齡\(testArr[0].age!)")
輸出:
arr[0]地址=<Aiscreen.Person: 0x6000032e8cc0>;testArr[0]地址=<Aiscreen.Person: 0x6000032e8cc0>
arr->person1年齡10,testArr->person1年齡10
[<Aiscreen.Person: 0x6000032e8cc0>, <Aiscreen.Person: 0x6000032e88a0>]
arr->person1姓名修改了,testArr->person1姓名修改了
arr->person1年齡100,testArr->person1年齡100
- 當(dāng)改變數(shù)組時數(shù)組會改變地址(元素地址不變碱妆,兩個數(shù)組指向同一個地址,元素地址改變昔驱,兩個數(shù)組指向不同地址)
- 同一個內(nèi)容疹尾,同一個地址。
- 改變了內(nèi)容骤肛,新的地址航棱。
testArr.remove(at: 0)
print("arr[0]地址=\(arr[0]);testArr[0]地址=\(testArr[0])")
輸出:
arr[0]地址=<Aiscreen.Person: 0x6000032e8cc0>;testArr[0]地址=<Aiscreen.Person: 0x6000032e88a0>