美文网首页工作中用到的好技术
iOS使用协议解决重用界面时模型的不兼容

iOS使用协议解决重用界面时模型的不兼容

作者: Fsn_soul | 来源:发表于2016-12-15 18:59 被阅读65次

如果工程项目换了几波人接手开发,那么就有可能出现一种现象:
某个控制器是用classA模型的数据显示的,如果其他人想复用这个控制器,那么必须就得传入classA模型,但是其他人定义的是classB模型,或者classC模型数据(虽然这些模型表示的意思是一样的但属性名各不相同).这时一般的做法就是把classB或classC模型的数据一个个赋值给新创建的classA模型.如果这个控制器复用率挺高的话就会产生一堆这样的赋值代码,当然你也可以在classB模型中提供一个转换为classA模型的方法.
不过今天要讲的是通过定义一个协议来实现这一需求,
具体思路如下:
1.首先定义一个协议,在这个协议里定义一些属性,这些属性将是控制器数据的来源.
2.其他模型遵循这个协议,并实现这些属性的setter/getter方法.
3.在控制器里面使用遵守该协议的模型.这样控制器使用的其实已经不是一个具体某个类的模型了.
代码如下:

@protocol ModelProtocl <NSObject>

@optional
@property (nonatomic, copy) NSString *carId;
@property (nonatomic, copy) NSString *carName;
@property (nonatomic, copy) NSString *carLogo;

@end

@interface XQViewController : UIViewController

@property (nonatomic, strong) NSMutableArray<id<ModelProtocl>> *datas;

@end

@implementation XQViewController

- cellForRow…{
    id<ModelProtocl> model = self.datas[indexPath.row];
    //使用该model配置cell
    cell.textLabel.text = model.carName;
    …
}

@end

@interface classB : NSObject<ModelProtocl>

@property (nonatomic, copy) NSString *pNameA;
@property (nonatomic, copy) NSString *pNameB;
@property (nonatomic, copy) NSString *pNameC;
@property (nonatomic, copy) NSString *pNameD;
@property (nonatomic, copy) NSString *pNameE;

@end

@implementation classB

-(NSString *)carId{
    return self.pNameA;
}
-(NSString *)carName{
    return self.pNameB;
}
-(NSString *)carLogo{
    return self.pNameC;
}

@end

这样做比在classB模型中提供一个转换为classA模型的方法有什么优势呢?
优势就是你不需要查看到底需要赋值哪些属性,可能classA模型里还有很多不相关的属性,减少出错的可能.
如果你的项目中也因为数据模型的不同而导致复用某个UI时写一堆恶心的模型转换代码,或许你可以尝试一下.

相关文章

  • iOS使用协议解决重用界面时模型的不兼容

    如果工程项目换了几波人接手开发,那么就有可能出现一种现象:某个控制器是用classA模型的数据显示的,如果其他人想...

  • 七层网络模型

    OSI七层模型 建立七层模型的主要目的是为解决异种网络互连时所遇到的兼容性问题。它的最大优点是将服务、接口和协议这...

  • iOS单元测试

    iOS单元测试 前言 单元测试使用XCTest框架 单元测试的目标:模型文件 用处:不基于界面UI的情况下,保证模...

  • JavaScript兼容

    // 属性的兼容,使用||解决// 方法的兼容,使用if判断解决 event事件获取兼容 注意:event需要逐层...

  • 系统不同版本方法的兼容性解决方案

    ios开发的系统兼容性问题解决 1:系统方法过时的注解 2:系统不同版本方法的兼容性解决方案1 (最佳,不产生警告...

  • 关于H5在安卓ios平台兼容性问题,及解决方案

    ios兼容问题 1.ios 表单元素 有内部阴影 解决方案 2.ios input 调用键盘屏幕上移后,失去焦点不...

  • 暂时解决Https问题

    因为ios要求要使用https协议,所以如果有些网站使用http协议可以用以下方法来解决在info.plist文件...

  • Reveal 界面调试工具

    Reveal是一个iOS程序界面调试工具,使用Reveal,我们可以在iOS开发时动态的查看和修改应用程序的界面,...

  • Mac下的 idle 不能输入中文解决办法

    目前使用最新的 版本(3.7.0)就可以了 解决大全说白了还是不兼容不匹配 的问题 这里解决的办法是 使用的 Ac...

  • swift 模型 协议 拓展 泛型 小实践

    协议支持关联类型 模型支持泛型 协议与模型组成复合体 以供外界遵守协议使用

网友评论

    本文标题:iOS使用协议解决重用界面时模型的不兼容

    本文链接:https://www.haomeiwen.com/subject/acygmttx.html