Swift中類的兩段式構造 類的構造過程

2021-09-07 05:42:02 字數 852 閱讀 5942

import foundation

/*類的構造需要兩個階段:

第一階段:

1.程式呼叫子類的某個構造器

2.為例項分配記憶體, 此時例項的記憶體還沒有被初始化

3.指定構造器確保子類定義的所有例項儲存屬性都已被賦初值

4.指定構造器將呼叫父類的構造器, 完成父類定義的例項儲存屬性的初始化

5.沿著呼叫父類構造器的構造器鏈一直往上執行, 直到到達構造器鏈的最頂部

第二階段:

1.沿著繼承樹往下, 構造器此時可以修改例項屬性和訪問self, 甚至可以呼叫例項方法

2.最後, 構造器鏈中的便利構造器都有機會定製例項和使用self

為了使得構造過程更加安全, swift進行了安全檢查

安全檢查1:指定構造器必須先初始化當前類中定義的例項儲存屬性, 然後才能向上呼叫父類構造器

安全檢查2:指定構造器必須向上呼叫父類構造器, 然後才能對繼承得到的屬性賦值

安全檢查3:便利構造器必須先呼叫同乙個類的其他構造器, 然後才能對屬性賦值

安全檢查4:構造器在第一階段完成之前, 不能呼叫例項方法, 不能讀取例項屬性

*/class person

// 定義便利構造器(使用convenience修飾)

convenience init(n name: string, w weight: double)

}class man: person

convenience init(s ***: string, n name: string, weight: double)

}var man = man(***: "男", name: "rinpe", weight: 62.0)

Swift中類的重寫

import foundation class food class var str string class dinner food override 型別屬性 overrideclassvarstr string let tomsdinner dinner 例項屬性 print tomsdinn...

swift構造器,swift類的初始化方法

swift類的初始化,swift init方法最全面的介紹 swift裡面會經常看到申明屬性申明成可選型別,其實這和構造器也是有關係的。申明變數時,用?申明可選值型別的話,在之後使用時都需要顯式的寫上解包操作,而用!申明時,之後使用會預設隱式的加上!解包,兩者申明之後不初始化都會預設乙個nil值 構...

swift中的類和結構

類的宣告 類是乙個引用型別,也就是說其實例分配到堆中 屬性,方法,建構函式,析構函式,索引器 subscript stored properties 儲存屬性 computed properties 計算屬性 class person didset old var p person p.name 三...