iOS JSONModel使用

JSONModel是json轉model的第三方開源庫。當我們向服務器發送一個請求之後,通過JSONModel把數據轉成model就可以很方便我們使用了。

pod 'JSONModel'

基本使用方式

例如這一json數據

{
   "first" : 1,
   "second": 2,
   "third" : 3,
   "fourth": 4
}

我們定義如下模型.m中可以不做任何處理

#import <JSONModel/JSONModel.h>

@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString* fourth;

@end

從json數據中我們可以看出,服務器給我們的數據類型都是一致的,而我們定義的數據模型中有int、double、float、NSString這4種,我們不需要做任何處理,JSONModel會幫我們自動轉換。

JSONValueTransformer類中有如下支持的轉換

NSMutableString <-> NSString
NSMutableArray <-> NSArray
NS(Mutable)Array <- JSONModelArray
NSMutableDictionary <-> NSDictionary
NSSet <-> NSArray
BOOL <-> number/string
string <-> number
string <-> url
string <-> time zone
string <-> date
number <-> date
  1. 使用JSONModel時,不需要額外去檢查所要的服務器屬性是否有返回。JSONModel的initWithDictionary方法會自動去進行檢查並處理。

  2. 有效性檢查,如果指定的服務器返回的某個字段沒有返回,而且又是必須的, 像下面這樣寫,則會拋出異常。

    //this property is required
    @property (nonatomic,copy) NSString* fourth;
    因爲默認這個值是必須的。

    一般情況下,我們不想因爲服務器的某個值沒有返回(nil)就使程序崩潰, 我們會加關鍵字Optional。像這樣

    @property (nonatomic,copy) NSString<Optional>* fourth;

    如果不想每一條屬性都添加,我們也可以在.m文件中重寫方法

    +(BOOL)propertyIsOptional:(NSString *)propertyName{
         return  YES;
    }

使用如下方法給model賦值

//假設responseObject[@"data"]是服務器返回給我們的數據
OneModel *model = [[OneModel alloc]initWithDictionary:responseObject[@"data"] error:nil];

對獲得的model我們可以通過如下方法把它轉成字典

-(NSDictionary*)toDictionary;

模型嵌套

#import <JSONModel/JSONModel.h>
#import "TwoModel.h"

@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString* fourth;
@property (nonatomic,strong)TwoModel* twoModel;

@end

模型結合

#import <JSONModel/JSONModel.h>

@protocol OneModel//注意要加上這句
@end
@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString<Optional>* fourth;

@end

@interface ThreeModel : JSONModel

@property (nonatomic,assign)NSString<Optional>* id;
@property (nonatomic,strong)NSArray<OneModel,Optional>* one;

@end
#import "OneModel.h"

@implementation OneModel
@end

@implementation ThreeModel
@end

在此附上他人更詳盡的講解

發佈了52 篇原創文章 · 獲贊 26 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章