iOS | 多态的实际运用

作者 : 开心源码 本文共1530个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共188人阅读

一句话概括多态:子类重写父类的方法,父类指针指向子类

或者许你对多态的概念比较模糊,但是很可能你已经在不经意间运用了多态。比方说:

有一个tableView,它有多种cell,cell的UI差异较大,但是它们的model类型又都是一样的。

因为这几种cell都具备相同类型的model,那么你一定会先建一个基类cell,如:

@interface BaseCell : UITableViewCell@property (nonatomic, strong) Model *model;@end

而后各种cell继承自这个基类cell:

红绿蓝三种子类cell

@interface RedCell : BaseCell@end

子类cell重写BaseCell的setModel:方法:

// 重写父类的setModel:方法- (void)setModel:(Model *)model {    // 调用父类的setModel:方法    super.model = model;        // do something...}

在controller中:

// cell复用ID array- (NSArray *)cellReuseIdArray {    if (!_cellReuseIdArray) {        _cellReuseIdArray = @[RedCellReuseID, GreenCellReuseID, BlueCellReuseID];    }    return _cellReuseIdArray;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    static NSString *cellResueID = nil;    cellResueID = self.cellReuseIdArray[indexPath.section];    // 父类    BaseCell *cell = [tableView dequeueReusableCellWithIdentifier:cellResueID];    // 创立不同的子类    if (!cell) {        switch (indexPath.section) {            case 0: // 红            {                // 父类指针指向子类                cell = [[RedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID];            }                break;                            case 1: // 绿            {                // 父类指针指向子类                cell = [[GreenCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID];            }                break;                            case 2: // 蓝            {                // 父类指针指向子类                cell = [[BlueCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellResueID];            }                break;        }    }    // 这里会调用各个子类的setModel:方法    cell.model = self.dataArray[indexPath.row];    return cell;}

不出意外,相似于上面的代码我们都写过,其实这里就运用到了类的多态性。

多态的三个条件:

  • 继承:各种cell继承自BaseCell
  • 重写:子类cell重写BaseCell的setModel:方法
  • 指向:父类cell指针指向子类cell

以上,就是多态在实际开发中的表现。

正当运用类的多态性可以降低代码的耦合度让代码更易扩展。

把这些概念性的东西跟日常实际开发相结合,你就能秒懂且难忘。

已是最前 目录 下一篇

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS | 多态的实际运用

发表回复