KVC建構函式

2021-07-15 08:44:50 字數 1787 閱讀 2356

1.物件的創造過程

在swift中必選屬性,初始化是分段的,先初始化本類的必選屬性,然後再呼叫super.init初始化父類的必選屬性,super.init就是整個建構函式的結束

2.kvc給物件初始化

kvc原理:在程式執行時給物件傳送setvalue: forkey的訊息

kvc機制:

1..setvaluesforkeyswithdictionary( dict )遍歷字典中的鍵值對

2.給物件傳送setvalue: forkey:訊息

3.kvc會檢查物件的屬性是否例項化, 如果沒有例項化

-1呼叫屬性的例項化方法, 分配記憶體空間

-2為屬性設定值

具體使用:

使用kvc設定初始值

使用kvc初始化物件

但是使用kvc 要注意以下兩點 

1.kvc 還是oc的那一套機制,string等對應的構造方法,但是int nsinteger這些基本資料型別 沒有構造方法,如果基本資料型別的屬性沒設定初始值,它預設的就是nil,這樣kvc 設定初始值時就會報(this class is not key value coding-compliant for the key age)鍵值不匹配的錯誤,所以屬性是基本資料型別時要記得為其設定初始值

2.kvc為屬性賦值,看字典中的鍵對應的屬性的key 是否存在 如果存在就只直接賦值  不存在就會將訊息**給 setvalue: forundefinedkey:當字典中的key在屬性沒有時,這時程式就會報錯,解決辦法就是重寫一下setvalue:forundefinedkey方法對未定義的key不做操作。

重寫方法起過濾作用

3.便利的建構函式與指定的建構函式

在建構函式中可以使用建構函式**幫助完成部分構造工作。類建構函式**分為橫向**和向上**。

1.指定建構函式屬於向上**,指定建構函式就是必須能能例項化出物件的建構函式,指定建構函式必須呼叫其直接父類的指定建構函式,除非沒有父類。

2.便利建構函式屬於橫向**,便利建構函式必須呼叫同一類中的其他指定建構函式,或  者使用 self. 的方式呼叫父類分便利建構函式,便利建構函式可以返回nil,也可以被繼承。

指定建構函式

便利建構函式

子類中的便利建構函式

3.遍歷建構函式與指定建構函式的關係

建構函式鏈

父類中最右邊的遍歷函式呼叫同一類中的中間的便利建構函式,但 便利建構函式必須最終以呼叫乙個指定建構函式結束。

子類中最左邊的指定建構函式繼承父類的指定函式,最右邊的遍歷函式以self的身份呼叫父類的指定建構函式

Swift 4 建構函式 KVC構造

viewcontroller.swift import uikit 在swift中 所有的類和類的方法 都是共享的 在同乙個命名空間 所有的類都是共享的 命名空間 是專案名稱 class viewcontroller uiviewcontroller person.swift 建構函式 分配記憶體空...

swift中KVC建構函式,和執行流程

kvc 執行流程 1.物件呼叫 setvaluesforkeyswithdictionary 遍歷鍵值 給物件傳送setvalue forkey 2.在 setvalue forkey 會根據鍵值 檢測 物件是否存在對應的屬性 3.如果屬性存在 就直接完成賦值的操作 4.如果屬性不存在 就 給 se...

Swift3 0 KVC建構函式與基本資料型別

name屬性是可選的,在需要的時候建立 在手機開發中,記憶體非常寶貴,實際執行中很多屬性不一定需要分配空間 var name string?init dict string anyobject let p student dict name 小明 as anyobject print p.name ...