美文网首页
Swift中的Array值传递问题

Swift中的Array值传递问题

作者: 小学生课代表 | 来源:发表于2021-07-19 16:23 被阅读0次

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]地址=<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. 当改变数组时数组会改变地址(元素地址不变,两个数组指向同一个地址,元素地址改变,两个数组指向不同地址)
  • 同一个内容,同一个地址。
  • 改变了内容,新的地址。
testArr.remove(at: 0)
print("arr[0]地址=\(arr[0]);testArr[0]地址=\(testArr[0])")

输出:

arr[0]地址=<Aiscreen.Person: 0x6000032e8cc0>;testArr[0]地址=<Aiscreen.Person: 0x6000032e88a0>

相关文章

  • Swift中的Array值传递问题

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

  • 从零开始Swift之集合

    Swift中提供了三种主要的集合类型,Array,Sets,Dictionary Array Swift数组中的值...

  • Swift 3 结构体

    swift中结构体,属于值类型,在swift中,Array, Dictionary, Set, Int, Floa...

  • Swift和OC中数组的区别

    swift:Array 在Swift 中是一个结构体,在Swift中结构体是值类型,他们的值是复制的而不是引用的。...

  • 理解Array和NSArray的差异

    按值语义实现的Array 在Swift中,Array是按照值语义实现的,当我们复制一个Array对象时,会拷贝整个...

  • Swift探索( 十二): Array源码分析

    一:Array 的内存布局 在 Swift 中 Array 其实是用结构体实现的,所以 Array 是值类型。 ...

  • Swift中关于Array的一些常用API

    关于Swift中Array的常用函数 为array0添加类型为Int的元素; 无返回值, 直接改变array0 ...

  • Array slice

    [TOC] Array Array赋值:会复制所有元素 函数传递:会复制所有元素,如果要修改Array的值,传递指...

  • SwiftUI属性装饰器(@Binding)

    一、简介 开发中,我们需要把一个View的属性,传递到一个子View中;Swift中,值传递的形式是值传递,也就是...

  • golang学习笔记(七)复合类型

    复合类型 类型名称作为函数参数pointer指针值传递array数组值传递slice切片引用传递map字典引用传递...

网友评论

      本文标题:Swift中的Array值传递问题

      本文链接:https://www.haomeiwen.com/subject/xrchmltx.html