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

tim*_*one 2 uitableview swift

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

vac*_*ama 12

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

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")
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做的优点是,[AnyObject]或者NSMutableArray只有TableItem在您的数组中允许实现的类,因此您可以获得额外的类型安全性.