很多時候我們需要把從伺服器端請求下來的資料轉成model類,今天就介紹一下如何利用runtime實現字典轉模型
class person:nsobject主要分為一下幾步
(1)獲取所有的屬性的名字
(2)通過屬性的名字去字典裡取值
(3)用kvc為model類賦值
extension nsobjectstudent類繼承自person類我們也要為student類中父類的屬性賦值,也就是說我們在遍歷屬性的同時也要為父類的屬性 ###4、遍歷父類中得屬性 在這種情況下我改變了一下思路,在獲取屬性的同時不在用kvc直接賦值,而是把獲取的屬性存起來,得到所有的屬性之後在進行賦值 把擴充套件中得**改造之後如下class student:person
extension nsobject}}思路如下,在獲取屬性的過程中判斷是否屬於foundtation框架,如果是直接賦值,如果不是就獲取這個類的所有屬性,對這個類的屬性進行賦值,然後把card這個類的物件賦值給person這個類的物件,修改**如下。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
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 提供的工具寫出漂亮簡潔的實現。我們從乙個簡單的實現開始,並且逐步新增功能。我們簡要看一下字典的工作原理 它通過任意型別的關鍵字來設定和獲取值。這些值常常儲存在乙個陣列中,當然也可以儲存在樹型結構中。由於...