Swift编程 Swift快速入门

Swift学习笔记-值类型与引用类型

2018-10-29  本文已影响5人  土豆吞噬者

Swift中Array,Dictionary,Int,String等都是用结构体来实现的,所以这些都是值类型,而Class则是引用类型

值类型

值类型在赋值或者参数传递的时候总会复制自己,Swift标准库中的值类型实现了写时复制功能,每次复制的时候都会共享同一片存储空间,只有真正改变实例数据时才会产生一份副本

import Foundation

var str1="hello world"
var str2=str1
str2+=", xy say"
print(str1)//hello world
print(str2)//hello world, xy say

引用类型

引用类型在赋值或者参数传递的时候都会创建新的引用,而不会复制自己

import Foundation


class Person{
    var height=170
    var color:String="black"
}

var person1=Person()
var person2=person1
print(person1.height)//170
person2.height=180
print(person1.height)//180
print(person2.height)//180

值类型与引用类型混用

值类型中使用引用类型会增加复杂程度,而引用类型中使用值类型则没有这个问题
当一个值类型包含引用类型,然后发生复制时,在Swift中不会创建新的引用类型实例,这称为浅复制,而深复制则会复制引用类型的实例

class Person{
    var height=170
    var color:String="black"
    init(height:Int,color:String) {
        self.height=height
        self.color=color
    }
}


var person1=Person(height:180,color:"red")
var person2=Person(height:170,color:"blue")
var person3=Person(height:160,color:"white")

var personArray1=[person1,person2,person3]
var personArray2=personArray1
personArray2[0].color = "purple"
print(personArray1[0].color)//purple
print(personArray2[0].color)//purple

相等与同一

import Foundation

class Person{
    var height=170
    var color:String="black"
    init(height:Int,color:String) {
        self.height=height
        self.color=color
    }
}


var person1=Person(height:180,color:"blue")
var person2=Person(height:180,color:"blue")
var person3=person1
print(person1 === person2)//false
print(person1 === person3)//true

let value1=1
let value2=1
print(value1 == value2)//true

什么时候用值类型,什么时候用引用类型

上一篇 下一篇

猜你喜欢

热点阅读