YYModel使用小結(jié)

YYmodelgitHub地址

在gitHub上README中有中文說(shuō)明,以及怎么導(dǎo)入到項(xiàng)目中

現(xiàn)在介紹一下怎么解析復(fù)雜多層的數(shù)據(jù)
參照README中的介紹以及結(jié)合我自己項(xiàng)目的經(jīng)驗(yàn)做一個(gè)介紹
1,json數(shù)據(jù)有一層或者兩層多層,但是每一層的嵌套的時(shí)候都是字典類型,即為:(不要管這個(gè)json格式對(duì)不對(duì))

{   
    “1”:“1”,
    “2”:{
            “3”:“3“,
            ”4“:{
                      ”7“:”7“
                    },
   ”5“:”5“,
   ”6“:”6“
            }
}

就是這樣一層一層的字典形式的,只需要一層一層的把對(duì)應(yīng)的字段寫入model中,YYModel會(huì)自動(dòng)轉(zhuǎn)。

例子:


// JSON:
{
    "n":"Harry Pottery",
    "p": 256,
    "ext" : {
        "desc" : "A book written by J.K.Rowing."
    },
    "ID" : 100010
}

// Model:
@interface Book : NSObject
@property NSString *name;
@property NSInteger page;
@property NSString *desc;
@property NSString *bookID;
@end
@implementation Book
//返回一個(gè) Dict,將 Model 屬性名對(duì)映射到 JSON 的 Key。
+ (NSDictionary *)modelCustomPropertyMapper {
    return @{@"name" : @"n",
             @"page" : @"p",
             @"desc" : @"ext.desc",
             @"bookID" : @[@"id",@"ID",@"book_id"]};
}
@end

重點(diǎn)是這張圖片


圖片.png

2,json數(shù)據(jù)中有多層,但是是不同類型,此時(shí)就要用到:容器類屬性

@class Shadow, Border, Attachment;

@interface Attributes
@property NSString *name;
@property NSArray *shadows; //Array<Shadow>
@property NSSet *borders; //Set<Border>
@property NSMutableDictionary *attachments; //Dict<NSString,Attachment>
@end

@implementation Attributes
// 返回容器類中的所需要存放的數(shù)據(jù)類型 (以 Class 或 Class Name 的形式)。
+ (NSDictionary *)modelContainerPropertyGenericClass {
    return @{@"shadows" : [Shadow class],
             @"borders" : Border.class,
             @"attachments" : @"Attachment" };
}
@end

將每一層的數(shù)據(jù)放到一個(gè)容器里面,容器的數(shù)據(jù)類型由返回的json決定。
圖片.png

圖片.png

圖片.png

圖片.png

3,model里面如何嵌套model(滿足的要求就是 嵌套的都是字典類型)


圖片.png

圖片.png

4,YYmodel還有別的功能,都在README中,目前我就用這個(gè)解析數(shù)據(jù),滿足任何坑的后臺(tái),能夠拿到任何層的數(shù)據(jù)

純字典和字典數(shù)組混合,替換關(guān)鍵字,映射類的方法不同

映射:
// 返回容器類中的所需要存放的數(shù)據(jù)類型 (以 Class 或 Class Name 的形式)。
+ (NSDictionary *)modelContainerPropertyGenericClass {
    return @{@"shadows" : [Shadow class],
             @"borders" : Border.class,
             @"attachments" : @"Attachment" };
}
替換字符:
+ (NSDictionary *)modelCustomPropertyMapper {
    return @{@"name" : @"n",
             @"page" : @"p",
             @"desc" : @"ext.desc",
             @"bookID" : @[@"id",@"ID",@"book_id"]};
}


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 ? iOS源碼解析—YYModel(YYClassInfo)分析了如何根據(jù)OC的Class對(duì)象構(gòu)建...
    egoCogito_panf閱讀 11,834評(píng)論 4 32
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 有一種人,在跌落至谷底的時(shí)候能夠迅速反彈,并且很快能夠恢復(fù)造血。 有一種是,跌落至谷底以后,很難在爬起來(lái)。 這兩種...
    蔡彥宏閱讀 1,933評(píng)論 2 3
  • 這是個(gè)怎樣特殊的日子呢? 因?yàn)橐辉绫怀啥检F霾的朋友圈刷了屏?因?yàn)橥k??因?yàn)榛@球場(chǎng)奔 跑著的矯健的身影?或者是,我再...
    啞巴五月閱讀 478評(píng)論 0 0

友情鏈接更多精彩內(nèi)容