Swift里面,值類型指的是 enum
和struct
,引用類型指的是class
。讓我們看看它們的區別。
值類型 diff 引用類型
struct Address {
var street: String
}
struct Person {
var name: String
var age: Int
var address: Address
}
var myAddress = Address(street: "廣州大道東??")
var DaDong = Person(name: "大朕東", age: 19, address: myAddress)
///一天,大東去了北京
myAddress.street = "北京香格里拉酒店??"
DaDong.address // 廣州大道東?? ??
我明明改了myAddress的的參數,為什么DaDong這個變量沒有改?讓我們看看class
class Address {
var street: String
init(street: String) {
self.street = street
}
}
class Person {
var name: String
var age: Int
var address: Address
init(name: String, age: Int, address: Address) {
self.name = nam
self.age = age
self.address = address
}
}
var myAddress = Address(street: "廣州大道東??")
var DaDong = Person(name: "大朕東", age: 18, address: myAddress)
///一天,大東去了北京
myAddress.street = "北京香格里拉酒店??"
DaDong.address // 北京香格里拉酒店?? ??
結論
var myAddress = Address(street: "廣州大道東??")
var DaDong = Person(name: "大朕東", age: 19, address: myAddress)
看這兩行代碼,用struct實例對象時,其實我們傳給Dadong的address是myAddress的一個拷貝值;而相對于class,在實例DaDong這個變量時,傳給address只是一個引用,相當于Dadong的address和myAddress指向的是同一塊內存空間,這樣,改變了myAddress的值,Dadong的address也會隨之改變。
值類型
引用類型