類別 (class) 跟結構 (structure) 在定義上大致相同,這裡先以結構為例說明如何定義屬性 (property) 及方法 (method)
屬性定義在 struct 的下方,可用 var 定義為變數 (variable) 或用 let 定義為常數 (constant) ,至於方法的定義就跟函數 (function) 一樣,舉例如下
struct StructDemo { |
// 變數的儲存性屬性 |
var a: Int |
// 常數的儲存性屬性 |
let b: Int |
// 第一個實體方法 |
func doSomething() -> Int { |
// 回傳兩個屬性的相加值 |
return a + b |
} |
// 第二個實體方法 |
func doSomething2(a: Int, b: Int) -> Int { |
// 回傳兩個參數的相加值 |
return a + b |
} |
// 第三個實體方法 |
mutating func doSomething3(a: Int) { |
// 將屬性 a 加上參數 a |
self.a += a |
} |
} |
var d = StructDemo(a: 11, b: 22) |
d.doSomething() |
d.a = 33 |
d.doSomething() |
d.doSomething2(55, b: 66) |
d.doSomething3() |
d.a |
d.b |
StructDemo 中先宣告兩個儲存性屬性 (stored property) ,一個是常數,另一個是變數
// 變數的儲存性屬性 |
var a: Int |
// 常數的儲存性屬性 |
let b: Int |
直接宣告出來的是儲存型屬性,另可定義計算型屬性 (computed property) 。
下面定義三個方法都是實體方法 (instance method) ,這是建立物件實體 (instance) 後才能使用的方法
// 第一個實體方法 |
func doSomething() -> Int { |
// 回傳兩個屬性的相加值 |
return a + b |
} |
doSomething() 回傳兩個屬性的相加值,下面的 doSomething2() 則回傳兩個參數 (property) 的相加值
// 第二個實體方法 |
func doSomething2(a: Int, b: Int) -> Int { |
// 回傳兩個參數的相加值 |
return a + b |
} |
doSomething2() 同時也說明如果參數跟屬性的名稱相同的情況,當兩者名稱相同時,方法大括弧內就以參數名稱為優先。下面的 doSomething3() 示範兩者相同時,要繼續使用屬性的話,屬性前就要加上關鍵字 self
// 第三個實體方法 |
mutating func doSomething3(a: Int) { |
// 將屬性 a 加上參數 a |
self.a += a |
} |
同時,因為 doSomething3() 修改屬性值,所以 func 前要加上 mutating 。
將以上程式碼輸入到 Playground ,結果如下
呼叫方法時,第一個參數的識別名稱可以不用寫出來。
儲存性屬性也可以直接指派初值,這樣就不必再建立物件實體時提供參數,例如
struct StructDemo2 { |
var a = 2 |
let b = 5 |
} |
var d2 = StructDemo2() |
d2.a = 24 |
var d3 = StructDemo2(a: 1, b: 2) |
d3.a = 6 |
輸入到 Playground ,結果如下
另可用關鍵字 static 定義結構的型態屬性 (type property) 及型態方法 (type method) ,例如
struct StructDemo3 { |
// 型態屬性 |
static var count = 0 |
// 型態方法 |
static func doSomething() { |
count += 1 |
} |
} |
StructDemo3.count |
StructDemo3.doSomething() |
StructDemo3.doSomething() |
StructDemo3.doSomething() |
StructDemo3.count |
類別中定義型態屬性及類別方法使用關鍵字 class 。
型態屬性及型態方法都直接用型態名稱呼叫,輸入到 Playground ,結果如下
下一個單元繼續討論建構子 (initializer) 及解構子 (deinitializer) ,前者是實體物件的初始化過程,後者則是結束物件的過程。
中英文術語對照
類別 | class |
結構 | structure |
屬性 | property |
方法 | method |
變數 | variable |
常數 | constant |
函數 | function |
儲存性屬性 | stored property |
計算型屬性 | computed property |
實體方法 | instance method |
實體 | instance |
型態屬性 | type property |
型態方法 | type method |
建構子 | initializer |
解構子 | deinitializer |
沒有留言:
張貼留言