Swift中的Array值传递问题

Array是个结构体,就是值类型,值类型传递传递的是值,修改传递过去的值不会改变原来的值
当Array传递的时候里面的元素是如何传递的呢?

当元素为值类型时是值传递
当元素为引用类型时是引用传递

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. 当改变引用类型的元素时,两个数组内此元素都会改变
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]地址=;testArr[0]地址=
arr->person1年龄10,testArr->person1年龄10
[, ]
arr->person1姓名修改了,testArr->person1姓名修改了
arr->person1年龄100,testArr->person1年龄100
  1. 当改变数组时数组会改变地址(元素地址不变,两个数组指向同一个地址,元素地址改变,两个数组指向不同地址)
  • 同一个内容,同一个地址。
  • 改变了内容,新的地址。
testArr.remove(at: 0)
print("arr[0]地址=\(arr[0]);testArr[0]地址=\(testArr[0])")

输出:

arr[0]地址=;testArr[0]地址=

你可能感兴趣的:(Swift中的Array值传递问题)