swift之用runtime實現字典轉模型

2021-07-05 01:28:43 字數 1590 閱讀 1162

很多時候我們需要把從伺服器端請求下來的資料轉成model類,今天就介紹一下如何利用runtime實現字典轉模型

class person:nsobject
主要分為一下幾步

(1)獲取所有的屬性的名字

(2)通過屬性的名字去字典裡取值

(3)用kvc為model類賦值

extension nsobject

class student:person

student類繼承自person類我們也要為student類中父類的屬性賦值,也就是說我們在遍歷屬性的同時也要為父類的屬性 ###4、遍歷父類中得屬性 在這種情況下我改變了一下思路,在獲取屬性的同時不在用kvc直接賦值,而是把獲取的屬性存起來,得到所有的屬性之後在進行賦值 把擴充套件中得**改造之後如下
extension nsobject}}

return model

}class func allproperties() -> [lkkproperty]?

}else

var outcount:uint32 = 0

//所有屬性lkkproperty裡面放著存放這個屬性

var propertiesarray = [lkkproperty]()

let properties = class_copypropertylist(self.classforcoder(),&outcount)

//獲取父類的所有屬性

let superm = self.superclass()?.allproperties()

if let _ = superm

//遍歷自己的屬性新增進去

for var i = 0;i

思路如下,在獲取屬性的過程中判斷是否屬於foundtation框架,如果是直接賦值,如果不是就獲取這個類的所有屬性,對這個類的屬性進行賦值,然後把card這個類的物件賦值給person這個類的物件,修改**如下。

class lkkproperty

//在去掉剩下的數字

var number:string = ""

for char in (code as string).characters

二、首先我們新增乙個方法,這個方法的作用是把字典陣列轉成模型陣列。**如下
//把乙個字典陣列轉成乙個模型陣列

class func objectarraywithkeyvaluesarray(array:nsarray) -> [anyobject]

}return temp

}

三,當判斷類的屬性是陣列的時候,通過這個方法拿到陣列裡面的型別

//子類重寫這個方法,說明陣列裡存放的物件型別

func objectclassinarray() -> [string:string]

四、在賦值時若發現是陣列並且是陣列裡裝的是自定義類的時候,用二的方法得到陣列物件,並且賦值

//把乙個字典裡的值賦給乙個物件的值

func setvaluesforproperties(properties:[lkkproperty]?,keyvalues:nsdictionary)else

}}else}}

}}

}

runtime 實現字典轉模型

runtime與kvc字典轉模型的區別 1.kvc 遍歷字典中所有的key,去模型中查詢有沒有對應的屬性名。2.runtime 遍歷模型中的屬性名,去字典中查詢。依舊是nsobjcet的model分類 字典轉模型 runtime 實現 import import inte ce nsobject m...

Runtime 字典轉模型

1 字典key與模型屬性不匹配 模型屬性數量 字典鍵值對數 import nsobject model.h import implementation nsobject model 獲取類中的所有成員變數 class copyivarlist unsafe unretained class cls,...

Swift 中實現字典

雖然 swift 原生的字典型別實現的 很複雜 毫無疑問是為了效能 但是我們可以利用 swift 提供的工具寫出漂亮簡潔的實現。我們從乙個簡單的實現開始,並且逐步新增功能。我們簡要看一下字典的工作原理 它通過任意型別的關鍵字來設定和獲取值。這些值常常儲存在乙個陣列中,當然也可以儲存在樹型結構中。由於...