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 完全不同,所以使用上也會有不同的意義與方法。

← iOS Swift : Enumerations iOS Swift : Properties →