swift限制類的建構函式之間**呼叫的規則
構造過程安全檢查
建構函式繼承
析構函式簡介
建構函式
init()
示例:
class employee
}
struct rectangle
rectangle(width: 10.0, height: 10.0)
上面結構體重使用了預設建構函式,結構體中按照從上到下的順序吧屬性名作為引數標籤,依次提供引數,不用宣告建構函式,直接可以按照屬性引數標籤賦值初始化例項。注意這種預設建構函式,值使用於結構體,在類中不能使用。
與oc不同的是swift的建構函式沒有返回值。
建構函式過載
class rectangle
init(w witdh:double, h height: double)
init(length: double)
}let r1 = rectangle()
let r2 = rectangle(w: 100, h: 100)
let r3 = rectangle(length: 100)
當屬性名稱和構造函式引數名相同時,新增self.
來區分是屬性函式引數。
建構函式**
結構體建構函式**
struct rectangle
init(w witdh:double, h height: double)
init(length: double)
}let r1 = rectangle()
let r2 = rectangle(w: 100, h: 100)
let r3 = rectangle(length: 100)
結構體因為不存在繼承,所以建構函式**很簡單,就是在同一型別中通過self.init(...)
語句來呼叫其他建構函式,self.init
建構函式就稱為建構函式**
。
類造函式**
class rectangle
init(w witdh:double, h height: double)
convenience init(length: double)
}let r1 = rectangle()
let r2 = rectangle(w: 100, h: 100)
let r3 = rectangle(length: 100)
類中建構函式橫向**必須前面加上convenience
關鍵字
class person
init(name:string, age:int)
convenience init(name:string)
convenience init()
}class student: person
override convenience init(name: string, age: int)
func test()
}
swift限制類的建構函式之間**呼叫的規則
構造過程安全檢查
建構函式繼承
如果子類沒有定義任何指定建構函式,它將自動繼承父類的所有指定建構函式
。(也就是說如果父類有多個指定建構函式,子類的指定建構函式只呼叫了乙個父類的指定建構函式super.init或者沒有重寫父類所有的指定建構函式,那麼子類不能繼承父類的建構函式,包括自定建構函式和便利建構函式,初始化時只能用自己的建構函式)
如果子類提供了所有父類指定建構函式的實現,無論是通過條件1繼承過來的,還是通過自己編寫實現的,它都將自動繼承父類的所有便利建構函式。(也就是如果子類不寫任何建構函式,則會繼承父類所有的建構函式,包括指定建構函式和便利建構函式,初始化時可以用自己的建構函式,也可以用父類的建構函式(包括父類繼承來的建構函式)。
析構函式
class rectangle
init(w witdh:double, h height: double)
convenience init(length: double)
deinit
}print("初始化")
var r : rectangle? = rectangle(length: 100)
print("將要設定為nil")
r = nil
print("釋放")
Swift 構造與析構
在某些情況下系統會自動生成乙個構造器。使用構造器時注意事項。在 swift 中採用繼承式初始化方式。如果沒有在類中實現任何指定構造器,那麼將繼承父類中的所有指定構造器。父類 class transport 無引數指定構造器 init str string 子類 class car transport...
swift學習筆記之構造方法和析構方法
swift的構造器 initilizer 和析構器 deinitializer 構造器並不像函式和方法那樣在括號前有乙個可辨別的名字。所以在呼叫構造器時,主要通過構造器中的引數名和型別來確定需要呼叫的構造器。正因為引數如此重要,如果你在定義構造器時沒有提供引數的外部名字,swift 會為每個構造器的...
學習Swift 析構過程
析構器只適用於類型別,當乙個類的例項被釋放之前,析構器會被立即呼叫。析構器用關鍵字deinit來標示,類似於構造器要用init來標示。swift 會自動釋放不再需要的例項以釋放資源,swift 通過自動引用計數 arc 處理例項的記憶體管理。通常當你的例項被釋放時不需要手動地去清理。但是,當使用自己...