您的位置:首页 > 移动开发 > IOS开发

iOS开发BaseModel的创建和使用(基类)

2016-01-29 11:06 961 查看
ios开发中数据处理和视图有许多重复使用的地方, 基类的使用可以有效的避免每次都写, 把重复的东西写到基类中, 正常创建的Molde类只需要继承基类即可, 这样有效的提高编码速度和代码质量, 基类还包括其他(BaseController, BaseView)等, 本文以BaseModel数据部分的基类为例。

先贡献基类的代码附带简单的说明

[code]/* BaseModel.h文件 */
#import <Foundation/Foundation.h>

@interface BaseModel : NSObject

/* 这里也可以添加每个地方都要用到的属性 比如id,name等等, 直接以正常属性书写方式写在这里即可 */
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *nID; /* 这里的参数以自己工程为准, 每个接口都有的参数可以写在这里 */
+ (id)modelWithDictionary:(NSDictionary *)dic; /** 这是公用的过滤接口数据的方法 */

@end
/* 注意: id 为系统关键字所以 属性声明时写的是nID 需要在后面过滤一下即可 */


[code]/* BaseModel.m文件 */
#import "BaseModel.h"

@implementation BaseModel

- (void)setValue:(id)value forUndefinedKey:(NSString *)key{
    if ([key isEqualToString:@"id"]) {
        self.nID = value;
    } /* 如果参数的key 是系统关键字的话需要在这里过滤一下, 把value赋给我们自己声明的属性即可 */
}
/* 根据数据字典返回model */
+ (id)modelWithDictionary:(NSDictionary *)dic {
    __strong Class model = [[[self class] alloc] init];
    [model setValuesForKeysWithDictionary:dic];
    return model;
}

@end


BaseModel的使用

首先创建model类

[code]/* ChinnelModel.h */
#import "BaseModel.h"

@interface ChannelModel : BaseModel /* 这里继承BaseModel */
/* 属性只需要写这个接口自己特有的属性即可, 公有的不需要写, 过滤方法和model生成的方法也不需要写 */
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *pk;
@property (nonatomic, copy) NSString *list_icon;
@property (nonatomic, strong) NSArray *sons;

@end

/* ChinnelModel.m */
#import "ChannelModel.h"

@implementation ChannelModel
/* 这里什么的都不需要写 */
@end


使用部分

[code]NSMutableArray *subArr = [NSMutableArray arrayWithCapacity:0];
        NSArray *arr = result[@"data"][@"datas"];/** 拿到接口数据中要用的数组 */
        for (NSDictionary *dic in arr) { /** 便是数组 */
            ChannelModel *model = [ChannelModel modelWithDictionary:dic]; /** 直接调用BaseModel 的方法即可 */
            [subArr addObject:model]; /** 添加到数组中 */
        }


关于BaseController 和BaseView原理和这个基本都相似, 就不一一列举了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: