一尘不染

如何在Swift中为UITableView处理数组中的两种不同类型

swift

我们正在考虑将应用程序从obj-c迁移到Swift。一个问题是,我们的obj-
c代码中有一个UITableView,其中包含类型为Header或类型的对象Item。基本上,它解析cellForRowAtIndexPath上具有的类型。Swift数组(据我所知)只能处理一种类型。鉴于此,我们如何处理UITableView中要使用的两种不同类型?是否会有像DataObj这样的包装对象,我们每个工作都有可精巧的实例?


阅读 277

收藏
2020-07-07

共1个答案

一尘不染

这是一种使用协议来组合两个类的方法:

protocol TableItem {

}

class Header: TableItem {
    // Header stuff
}

class Item: TableItem {
    // Item stuff
}

// Then your array can store objects that implement TableItem
let arr: [TableItem] = [Header(), Item()]

for item in arr {
    if item is Header {
        print("it is a Header")
    } else if item is Item {
        print("it is an Item")
    }
}

这种过度的优点[AnyObject]或者NSMutableArray是只有实现了这个类TableItem将数组中是允许的,所以您将获得额外的类型安全。

2020-07-07