【发布时间】:2017-09-26 07:41:47
【问题描述】:
我发现的唯一一件事是结构不能继承,但类可以,并且结构是按值传递而类是通过引用传递的,但我不明白那到底是什么。 谁能解释一下或者举个例子?
【问题讨论】:
-
主要:类是引用类型,结构是值类型
我发现的唯一一件事是结构不能继承,但类可以,并且结构是按值传递而类是通过引用传递的,但我不明白那到底是什么。 谁能解释一下或者举个例子?
【问题讨论】:
class Car {
var name: String
init(name:String){
self.name = name
}
}
var carA = Car(name: "BMW")
var carB = carA
//now I will change carB
carB.name = "Nissan"
print(carA.name) //This will print Nissan
struct CarStruct {
var name: String
init(name: String){
self.name = name
}
}
var carC = CarStruct(name: "BMW")
var carD = carC
//now I will change carB
carD.name = "Nissan"
print(carC.name) //This will print BMW
正如您所见,CarA 和 CarB 都指向同一个引用,因此如果一个更改另一个更改,因为引用正在更改,而在 CarC 和 CarD 中,它们是结构的副本各有各的价值。
【讨论】:
根据非常流行的 WWDC 2015 演讲“Swift 中的面向协议编程”video,Swift 提供了许多特性,使结构在许多情况下都优于类。
结构不再局限于一组包含某些值的字段。
相反,Swift 的结构具有与类完全相同的功能——除了继承——而是值类型(每次将它们传递到另一个变量时都会复制,例如 Int),而类是引用类型,通过通过引用而不是像在 Objective-C 中那样被复制。
【讨论】: