JSONModel 忽略一些字段

這里要說的重點不是在與JsonModel 本身有的方法的常規寫法,而是如何全局忽略無關屬性.(每個Model 都寫一下下面的方法,豈不是很蛋(^))

方式一.可選屬性 (就是說這個屬性可以為null或者為空)

{
  "id": "123",
  "name": null,
  "price": 12.95
}
@interface ProductModel : JSONModel
@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Optional>* name;
@property (assign, nonatomic) float price;
@property (strong, nonatomic) NSNumber<Optional>* uuid;
@end

@implementation ProductModel
@end

方式二.忽略屬性 (就是完全忽略這個屬性)

{
  "id": "123",
  "name": null
}
@interface ProductModel : JSONModel
@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Ignore>* customProperty;
@end

@implementation ProductModel
@end

方式三.設置所有的屬性為可選(所有屬性值可以為空)

@implementation ProductModel
+(BOOL)propertyIsOptional:(NSString*)propertyName
{
  return YES;
}
@end

重點在這里 propertyIsOptional方法默認返回的是NO;攔截該方法,使其返回YES.(當然,如果你修改JsonModel 源碼,當我沒說)

#import "objc/runtime.h"
@implementation  JSONModel (SafeJSONModel)

+(void)load{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        SEL org_Selector = @selector(propertyIsOptional:);
        SEL dt_Selector  = @selector(dt_propertyIsOptional:);
        
        Method org_method = class_getClassMethod([self class], org_Selector);
        Method dt_method  = class_getClassMethod([self class], dt_Selector);
        
        class_addMethod(self, org_Selector, method_getImplementation(dt_method), method_getTypeEncoding(dt_method));
//        if (isAdd) {
//            class_replaceMethod(self, dt_Selector, method_getImplementation(org_method), method_getTypeEncoding(org_method));
//        }else{
            method_exchangeImplementations(org_method, dt_method);
//        }
        
    });
}
+(BOOL)dt_propertyIsOptional:(NSString *)propertyName{
    [self dt_propertyIsOptional:propertyName];
    return YES;
}

@end
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,881評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,113評論 25 708
  • 最近看了素黑的 自愛無需等待,覺得以前那些淺薄的愛,無知的愛,好像也曾在自己身上出現過,只是那時候還不知道什么是自...
    公子逸誠閱讀 272評論 0 2
  • 【01】那樣的眉眼,似乎見過千遍萬遍。 今日孟婆送了我一段攝魂香。 她說許久不曾收集到這般純正的香了,若只是...
    竹原閱讀 710評論 1 1
  • -01 MAF180慢跑- 距離:10km時間:01:04:38平均配速:06'27" 最快配速:06'22" ...
    崔宏雷閱讀 551評論 0 50