Classes
在 Swift 中,定義一個 Class 的語法如下:
而 class 的 properties, method, initializers,都會在{ }
之中定義且實作。
另外跟 objc 比起來,有兩件事情不用做
- 不需要
import "Vehicle.h"
:因為 Swift 中只有一個檔案,「.h」檔不存在。 - 不需要繼承任何 base class:以前在 objc 中,任何 class 需要繼承
NSObject
,現在擇不需要,不繼承可以。但是,「要繼承也沒關係」,還是可以寫成:
Properties
在 class 中定義一個 property:
有 3 點要注意:
- 其寫法就跟之前定義 varaible 一樣。(也可以定義成 Constant:
let numberOfWheels = 0
) - 不用定義 Accessors (getter/setting) ,Swift 會自動幫你處理好!
- 在 Swift 中, properies 有分兩種 Stored Properties, Computed Properties.
Stored Properties
Stored properties,故名思義就是單純用來儲存資料的 properties
numberOfWheels
為 variable stored properties。另外還有 constant stored properties (如果用 let
宣告的話)
Computed Properties
第二種 properties 為 computed properties:
我們可以定義 computed properties 的型態,透過: String
。並且定義回傳值return "\(numberOfWheels) wheels"
。
此外,因為 computed properties 只需要回傳結果,不需要儲存結果,因此只定義了 get{}
,讓 computed properties 為 readonly。
當然你可以定義 set{}
:
但是在此範例中我們不需要。
既然 description
為 readonly 的 properties,在 Swift 中可以用更簡單的語法:
Initializer Syntax
在 Swift 中初始化一個 class:
只需要加上()
,不需要 alloc
等,因為 Swift 是 ARC,自動幫你處理好這些問題!
當然你也可以明確的指出 someVehicle
的型態,利用: Vehicle
Dot Syntax
在 Swift 中也有跟 objc 一樣的 dot (.
) 語法可以用,可以很輕鬆的 取得/修改 properties:
Class Inheritance
class 可以被繼承,語法如下:
在此範例中,我們想要 Bicycle
可以去更改 Vehicle
中 numberOfWheels
的初始值(因為 bicycle 有兩個輪子),因此我們要自己實作 initializer,語法如下:
init(){ }
是 Swift 中的 keyword,每個 class 都會有。當 init 時,第一件要做的事就是呼叫 super.init()
,因為 Bicycle
繼承 Vehicle
,因此需要先讓 Vehicle
初始化成功後,才可以使用 numberOfWheels
這些 properties。
接著我們就可以建立 Bicycle
物件(instance):