Swift中的Array值傳遞問(wèn)題

Array是個(gè)結(jié)構(gòu)體,就是值類型,值類型傳遞傳遞的是值,修改傳遞過(guò)去的值不會(huì)改變?cè)瓉?lái)的值
當(dāng)Array傳遞的時(shí)候里面的元素是如何傳遞的呢?

當(dāng)元素為值類型時(shí)是值傳遞
當(dāng)元素為引用類型時(shí)是引用傳遞

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
  1. 當(dāng)改變引用類型的元素時(shí),兩個(gè)數(shù)組內(nèi)此元素都會(huì)改變
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
  1. 當(dāng)改變數(shù)組時(shí)數(shù)組會(huì)改變地址(元素地址不變,兩個(gè)數(shù)組指向同一個(gè)地址,元素地址改變,兩個(gè)數(shù)組指向不同地址)
  • 同一個(gè)內(nèi)容,同一個(gè)地址。
  • 改變了內(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>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容