首先建立乙個類
實現方法如下:
而當我們利用建構函式生成例項時有以下幾種方法
在oc的例子中,構造器initwithname: age: 內部呼叫了另乙個構造器,避免了**重複,下面來圍觀swift中如何實現。
在swift中,當你建立乙個類或者結構體的時候,它們的屬性一定有初值(否則編譯不過,例如let a: string?,此時a賦值為nil,所以屬性一定有初值)。
如果類或者結構體沒有自定義構造器,那麼它們將獲得預設構造器,用預設構造器建立出來的物件的屬性值 是 類或者結構體宣告時候的屬性值。
class
person
let person = person();
print(person.name,person)
"nil 10\n"
struct location
let location = location();
print(location.longtitude,location.latitude);
"2.0 4.0\n"
此時對於結構體,還可以得到逐一成員構造器struct location
let location = location(longtitude: 4, latitude: 4);
對於剛才提到的oc的例子,這裡以結構體為例,同時引出**構造器的概念。struct location
init (longtitude:cgfloat, latitude:cgfloat)
}let location = location(longtitude: 10, latitude: 11);
print(location.longtitude,location.latitude);
對於類而言,引出指定構造器(向上**)和便利構造器(橫向**)的概念
複雜的**圖
分析上面的兩張圖可以看出,便利構造器只能呼叫同類的其他構造器,並且必須以指定構造器結束,而指定構造器必須呼叫父類的指定構造器。
1.類的便利構造器就是對指定構造器封裝一下,呼叫方法更簡單,或者說更加范型一些。
例:
class person
convenience init(name: string)
}let aperson = person(name: "張三", age: 13);
print(aperson.name,aperson.age);
//如果我只關心18歲的一類人,使用便利構造器
let apersonwhosageis18 = person(name: "李四");
print(apersonwhosageis18.name,apersonwhosageis18.age);
2.與oc不同的是,子類如果定義了指定構造器(不是重寫),那麼子類將失去繼承父類構造器的能力。
class soldier: person
}//由於子類自定義了指定構造器,導致例項只有這一種初始化方式
let soldier = soldier(rank: "三道槓", name: "李四", age: 24);
未完待續….. 學習Swift 析構過程
析構器只適用於類型別,當乙個類的例項被釋放之前,析構器會被立即呼叫。析構器用關鍵字deinit來標示,類似於構造器要用init來標示。swift 會自動釋放不再需要的例項以釋放資源,swift 通過自動引用計數 arc 處理例項的記憶體管理。通常當你的例項被釋放時不需要手動地去清理。但是,當使用自己...
析構 Swift學習筆記(十八)
注 本文為自己學習the swift programming language的筆記,其中的例子為引用原書和其他博文或自己原創的。每個例子都會批註一些實踐過程中的經驗或思考總結。1.基礎 析構過程 deinitialization 由析構函式 deinitializer 完成,類的例項在被 資源之前...
swift學習記錄(析構器)
析構器只適用於類型別,當乙個類的例項被釋放之前,析構器會被立即呼叫。析構器用關鍵字deinit 來標示。在類中,每個類只能有乙個析構器。基本語法 deinit析構過程原理 swift 通過自動引用計數 arc 來管理記憶體,會自動釋放不在需要的類來釋放資源。通常例項被釋放時不需要手動去釋放資源。但當...