over 6 years ago
Classes 宣告語法
class MyClass {
}
Class 實體
class MyClass {
}
let c = MyClass()
Class 取得 property
class MyClass {
let p = 0
}
let c = MyClass()
c.p
Class 是 reference type
Structure 宣告語法
struct MyStruct {
}
Structure 實體
struct MyStruct {
}
let s = MyStruct()
Structure 取得 property
struct MyStruct {
var p = 0
}
let s = MyStruct()
s.p
Structure 初始化 property
struct MyStruct {
var p: Int
}
let s = MyStruct(p: 123)
Structure 是 value type
Classes 與 Structures 相通的功能
- 定義 property 與儲存變數
- 定義方法來提供使用功能
- 定義 subscript 來取得變數
- 定義初始化方法
- 可以使用 extension 來擴增原本沒有定義的功能
- 可以透過 protocol 提供標準功能
Classes 特有的功能
- 繼承
- 確認實體隸屬於哪個 class
- 定義毀滅化方法
- Classes 屬於 reference types,因此一個 class 實體可以有複數個 reference
Classes 與 Structures 的選擇
在 Swift 中,classes 與 structure 的功能相當接近,兩者都能建立出 instance,
因此在建立 instance 前,更要先去設計並且思考實際上的使用情境,並選出符合情境的。
例如 Swift 的 string, array 等基本資料型態都是屬於 structure,
因此在 pass 這些 instance 時都會 copied 一份,
這個與 Objc 完全不同,所以使用上也會有不同的意義與方法。