您当前的位置: 首页 >  swift

Swift中由找不到removeAll(where:)方法引起的连锁反应(上)

发布时间:2018-11-23 07:42:04 ,浏览量:0

提示:本篇博文涉及到第三方库Eureka,但核心思想在于Swift内部数据处理的推断,不了解Eureka并不影响对本文的理解。Eureka只不过是对UITableView的便捷包装而已,需要进一步了解Eureka的童鞋可以观赏本猫Eureka学习系列博文。

核心代码
section.removeAll {baseRow in
    if let habitRow = baseRow as? HabitRow{
        let idxPath = habitRow.indexPath!
        return willRemoveIdxPaths.contains(idxPath)
    }
    return false
}

以上代码片段的功能是删除willRemoveIdxPaths队列中对应的所有Rows。Row对应着一个Cell,Cell是Eureka中对UITableViewCell的包装。那么上面实际是将指定的Cells从UITableView中删除。

核心问题

为什么要用removeAll(where:)方法去删除Rows,而不是用遍历删除的方法?比如说如下代码:

for idxPath in willRemoveIdxPaths{
	section.remove(at: idxPath.row)
}

原因是:遍历删除的方法在删除多个Row时行为并不正确!

道理很简单,当删除掉一个Row后,其他Row的索引会发生变化,那么其他待删除的索引就会指向错误的Row。

举个栗子:比如我要一次性删除0和1位置两个Row,但是当我删除掉0位置的Row后,原来1

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    107766博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0835s