美文网首页
Swift Array漫谈

Swift Array漫谈

作者: 我是繁星 | 来源:发表于2018-12-26 23:04 被阅读0次

apple文档中指出,每个数组都是保留一定量的内存来保存其内容,也就是数组长度固定,当有更多的数据插入到数组中时,当前数组会动态扩容,且存储的大小是原来的倍数,这回增加性能成本,建议如果知道存储多少元素,请在初始化时指明长度。

Array副本的修改

swift3.0后讲基本常用的类型Array、Dictinary和String等改为了结构体,也就由原本的类类型转变成了值类型。那么先看下值类型和引用类型有什么区别呢?

  • 值类型:每个实例都拥有其数据的一个副本,当赋值给一个变量或者常量,或传递给一个函数的时候,都会建立一个新副本。
  • 引用类型:所有实例共享一个数据副本,当被赋值给一个变量或常量或一个函数的时候,会传递这个指向实例的指针。

下图是swift值类型和引用类型:


1525333385999865.png

回到问题本身

//结构体
struct structObj {
    var value = 0;
}
//Class
class swiftObj{
    var value = 0

}
var swiftArr = [swiftObj(),swiftObj(),swiftObj()];
var swiftArr1 = swiftArr
swiftArr[0].value = 2;
print("swiftArr:\(swiftArr)\nswiftArr1:\(swiftArr1)")
        
var structArr = [structObj(),structObj(),structObj()];
var structArr1 = structArr
structArr[0].value = 2;
print("structArr:\(structArr)\nstructArr1:\(structArr1)")

//打印结果
objArr:[2, 0, 0]
objArr1:[2, 0, 0]

structArr:[2, 0, 0]
structArr1:[0, 0, 0]

解释:首先Array就是一个值类型,当它赋值给一个变量的时候会建立一个新副本。
1.由于引用类型初始化之后返回的是对象的一个引用,所以swiftArr中存储的其实是里面元素对象的引用。赋值给swiftArr1时就是拷贝了元素的引用,所以swiftArr1和swiftArr里的元素指向的是同一个对象,改变一个会影响另一个。
2.而对于structArr存储的是值类型,所以在赋值给structArr1的时候拷贝的是对象的副本,互不影响。

相关文章

  • Swift Array漫谈

    apple文档中指出,每个数组都是保留一定量的内存来保存其内容,也就是数组长度固定,当有更多的数据插入到数组中时,...

  • Swift vs. Kotlin 漫谈系列之接口

    Swift vs. Kotlin 漫谈系列之接口 Swift vs. Kotlin 漫谈系列之接口

  • convert Set to Array

    swift let array = Array(someSet)

  • 从零开始Swift之集合

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

  • Swift 中数组 Array 的实用操作

    截取数组 Swift 的 Array 没有了 subarrayWithRange 这个方法,但是 Swift 提供...

  • Swift string to array array to

    数组与字符串转换 Swift 字符串转数组: Swift 数组转字符串:

  • SWIFT Array

    删除元素

  • swift Array

    数组是一个最常用的数据类型的应用程序。使用数组来组织你的应用程序的数据。具体地说,您可以使用数组类型来控制单个的元...

  • swift——Array

    数组可以存储同一个类型的多个值,而且相同的值可以多次出现在数组中的不同位置。 创建数组 1.定义数据类型有两种形式...

  • swift array

网友评论

      本文标题:Swift Array漫谈

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