YYModel的一种使用方式 2023-04-26 周三

2023-04-25  本文已影响0人  勇往直前888

简介

在OC工程中,字典转模型是很重要的一个内容,基本上每一个工程都要用到。这块内容基本上会用到第三方库,而本人自从接触到YYModel之后,就再也没有更换过,一直用。
以前都是直接使用YYModel,而这次采用了基类的封装使用方式,感觉更好。
以后,提供一个Model的基类在整个工程中使用将成为标准操作。

封装方式

头文件:

@interface WGBBaseModel : NSObject <NSCopying, NSCoding>

/// 通过JSON得到实例
+ (instancetype)instanceWithJSON:(id)json targetClass:(Class)targetClass;

/// 通过JSON得到实例数组
+ (NSArray *)arrayWithJSON:(id)json targetClass:(Class)targetClass;

@end

源文件:

#import "WGBBaseModel.h"
#import <YYModel/YYModel.h>

@implementation WGBBaseModel

#pragma mark - instance
/// 通过JSON得到实例
+ (instancetype)instanceWithJSON:(id)json targetClass:(Class)targetClass {
    return [targetClass yy_modelWithJSON:json];
}

/// 通过JSON得到实例数组
+ (NSArray *)arrayWithJSON:(id)json targetClass:(Class)targetClass {
    return [NSArray yy_modelArrayWithClass:targetClass json:json];
}

#pragma mark - NSCopying, NSCoding

- (void)encodeWithCoder:(NSCoder *)coder {
    [self yy_modelEncodeWithCoder:coder];
}

- (instancetype)initWithCoder:(NSCoder *)coder {
    if (self = [super init]) {
        [self yy_modelInitWithCoder:coder];
    }
    return self;
}

- (id)copyWithZone:(NSZone *)zone {
    return [self yy_modelCopy];
}

- (NSUInteger)hash {
    return [self yy_modelHash];
}

- (BOOL)isEqual:(id)object {
    return [self yy_modelIsEqual:object];
}

@end

协议

- (NSUInteger)hash {
    return [self yy_modelHash];
}

- (BOOL)isEqual:(id)object {
    return [self yy_modelIsEqual:object];
}

字典转模型

/// 通过JSON得到实例
+ (instancetype)instanceWithJSON:(id)json targetClass:(Class)targetClass {
    return [targetClass yy_modelWithJSON:json];
}

/// 通过JSON得到实例数组
+ (NSArray *)arrayWithJSON:(id)json targetClass:(Class)targetClass {
    return [NSArray yy_modelArrayWithClass:targetClass json:json];
}

模型转字典

例子

字典转单个模型

@interface WGBUserInfoModel : WGBBaseModel

/// userId
@property(copy, nonatomic) NSString *userId;

/// 用户名
@property(copy, nonatomic) NSString *userName;

/// barCode
@property(copy, nonatomic) NSString *barCode;

/// 版本号
@property(assign, nonatomic) NSInteger versionCode;

@end
/// 字典转模型
WGBUserInfoModel *userInfoModel = [WGBUserInfoModel instanceWithJSON:response targetClass:[WGBUserInfoModel class]];

字典数组转模型数组

@interface WGBFinePhotoModel : WGBBaseModel

/// 已有的拍照数量
@property(assign, nonatomic) NSInteger hasPhotoNumber;

/// 总共需要拍照的数量;默认拍照数量
@property(assign, nonatomic) NSInteger totalPhotoNumber;

/// 已有照片的url列表
@property(copy, nonatomic) NSArray<NSString *> *picList;

/// 备注
@property(copy, nonatomic) NSString *remark;

@end
/// 转模型数组
NSArray<WGBFinePhotoModel *> *fineList = [WGBFinePhotoModel arrayWithJSON:response targetClass:[WGBFinePhotoModel class]];
上一篇下一篇

猜你喜欢

热点阅读