Swift 對比學習Swift構造器

2021-07-14 07:08:51 字數 2096 閱讀 5427

首先建立乙個類

實現方法如下:

而當我們利用建構函式生成例項時有以下幾種方法

在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 來管理記憶體,會自動釋放不在需要的類來釋放資源。通常例項被釋放時不需要手動去釋放資源。但當...