KVC在定義Model類中的妙用

2021-06-26 07:45:51 字數 2200 閱讀 3403

@我們應用程式使用mvc架構的話,對於處理資料類,我們會單獨的定義model類,在裡面為要展示的屬性進行初始化賦值,一般採用的方法是通過定義對應的屬性,挨個賦值.現在我要介紹的就是通過kvc,key-value的方式,進行賦值.

@先來看一段**:

#import @inte***ce mdcallshopobjectmodel : nsobject

// 定義全部商鋪資訊類要顯示的內容的屬性

@property (nonatomic, copy) nsstring *name; // 商店名

@property (nonatomic, copy) nsstring *businessid; // 屬性商鋪id

@property (nonatomic, copy) nsstring *address; // 商鋪位址

@property (nonatomic, copy) nsstring *telephone; // 商鋪**

@property (nonatomic, copy) nsstring *business_id; // kvc商鋪id

/** * 自定義乙個商點資訊類的初始化方法

* * @param dic 解析出來的**商店的資料是字典

* * @return 商店物件

*/-(id)initwithdictionary:(nsdictionary *)dic;

/** * kvc賦值方式

* * @param kvcdic 解析出來的**商店的資料是字典

* * @return 商店物件

*/- (id)initwithkvcdictionary:(nsdictionary *)kvcdic;

@end

#import "mdcallshopobjectmodel.h"

@implementation mdcallshopobjectmodel

- (id)initwithdictionary:(nsdictionary *)dic

return self;

}- (id)initwithkvcdictionary:(nsdictionary *)kvcdic

return self;

}- (void)setvalue:(id)value forundefinedkey:(nsstring *)key

@先看.h檔案,我定義了2個商店id屬性來展示區別.先宣告:大眾點評介面中返回的資料id是"business_id".

1.當用屬性方式賦值的時候,所取的屬性名可以不與請求資料中的屬性名相同;而用kvc方式賦值的時候,則必須完全相同,切記,大小寫都不能錯.

2.用屬性方式賦值,所定義的屬性數量很自由,你需要用到什麼就定義什麼,不受請求資料介面返回資料的屬性數量限制;而用kvc方式賦值,setvaluesforkeyswithdictionary方法會遍歷請求到的字典中的所有屬性,所有的key都會一一對應的賦值,這個時候,也就要求你在model中定義所有的屬性來接收.

3.kvc方式賦值比較方便,畢竟就一句話嘛,但是為了解決2中的問題,就需要用到- (void)setvalue:(id)value forundefinedkey:(nsstring *)key這個方法了,當你實現了這個方法,你就也能在用kvc方式賦值的時候,只定義自己需要的屬性了,因為當setvaluesforkeyswithdictionary找不到對應的key時,程式則會呼叫forundefinedkey這個方法,將key對應的值存入到value中,這樣,程式就不會崩潰了.

4.當你請求的資料中有"id",""description"等系統關鍵字的時候,也能通過forundefinedkey方法解決,舉例:

- (void)setvalue:(id)value forundefinedkey:(nsstring *)key  

}

5.第三點中的崩潰問題,我就用實際測試效果來解釋:

自定義元件中的model

handlechange 很好奇沒有找到父元件中定義的change,並且發現自定義元件中有乙個 export default 下面的prop不碼了搜尋了vue 文件才發現是為了避免衝突才這樣設定的 乙個元件上的 v model 缺省會利用名為 value 的 prop 和名為 input 的事件,但...

在類的定義

在類的定義中,宣告了乙個函式,在類外用乙個cpp檔案實現,要注意以下幾點 1.在cpp檔案中要把類的.h檔案include,寫類中函式定義時要用域運算子 來表示函式屬於類中,如 type x functionname 其中type是函式返回值型別,x是類名 functionname是函式名.2.在....

在類中定義常量的方法

問題 在類中建立乙個int型別的陣列 方法一 錯誤 class test 錯誤原因 1 因為在乙個類中,const恢復了它在c中的一部分意思,在每個類物件裡分配儲存並代表乙個值,這個值一旦被初始化以後就不能被改變。所以在類中使用了const的意思是 在這個物件的生命週期內,它是乙個常量。然而,每個物...