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 三...