二兩種字典轉模型的**
本文分為兩部分:一:教你怎樣一部獲取成員屬性(通過nsobject+autologproperty分類)
二:對比kvc和runtime兩種字典轉模型的方法並抽取乙個分類
+ (void
)createpropertycodewithdict:(nsdictionary
*)dict
else
if ([value iskindofclass:nsclassfromstring(@"__nscfnumber"
)])else
if ([value iskindofclass:nsclassfromstring(@"__nscfarray"
)])else
if ([value iskindofclass:nsclassfromstring(@"__nscfdictionary"
)])else
if ([value iskindofclass:nsclassfromstring(@"__nscfboolean"
)]),code];
}];nslog
(@"%@"
,strm);
}
1.遍歷自定義類中的成員變數
2.將遍歷獲取的成員變數定為value,複製給類中的ivar.
kvc是呼叫`setvalue: forkey: `的方法,將系統的成員變數作為value,自定義的屬性為key
如果自定義的屬性找不到就必須要呼叫 `- (void)setvalue:(id)value forundefinedkey:(nsstring *)key;`
來處理報錯。
但是runtime的字典轉模型是將自定義屬性生成的下劃線成員變數變為key.
`setvaluesforkeyswithdictionary:`就不會出現找不到key而報錯的問題了。
+ (statusmodel *)statuswithdict:(nsdictionary
*)dict
// 解決kvc報錯
- (void
)setvalue:(id
)value forundefinedkey:(nsstring
*)key
}
+ (instancetype)modelwithdict:(nsdictionary
*)dict }if
(value)
}return
objc;
}
- (void
)viewdidload
nslog
(@"%@"
,statuses);
self
.dataarray
= statuses;
}//懶載入dataarray
- (nsmutablearray
*)dataarray
return
_dataarray;
}
注意:demo中的工具類可以抽取使用
(function () {
('pre.prettyprint code').each(function () {
var lines = (
this
).te
xt()
.spl
it(′
\n′).
leng
th;v
arnumbering = $('
').addclass('pre-numbering').hide(); (
this
).ad
dcla
ss(′
has−
numb
erin
g′).
pare
nt()
.app
end(
for (i = 1; i <= lines; i++) { n
umbe
ring
.app
end(
iOS類別和類擴充套件
在ios中,有一種機制可以使使用者在沒有遠嗎的情況下擴充套件類的功能,但不是通過繼承,這就是類別。ios中沒有類似c 中可以定義私有方法和私有變數的關鍵字,要定義私有方法和私有變數,可以用類擴充套件來實現。類別 類別在不需要繼承的情況下可以擴充套件類的功能。但類別不能新增類的屬性和私有變數。類別可以...
ios 類別和擴充套件
類別 inte ce classname categoryname methoddeclarations end 注意事項 1 類別是類的擴充套件,只可以宣告方法,不可以宣告變數。並且,類別的方法優先順序較高,可覆蓋原類方法。2 類別的方法中,不可以呼叫super方法。類別的侷限 3 categor...
ios 類別和擴充套件
類別 inte ce classname categoryname methoddeclarations end 注意事項 1 類別是類的擴充套件,只可以宣告方法,不可以宣告變數。並且,類別的方法優先順序較高,可覆蓋原類方法。2 類別的方法中,不可以呼叫super方法。類別的侷限 3 categor...