我们正在考虑将应用程序从obj-c迁移到Swift。一个问题是,我们的obj- c代码中有一个UITableView,其中包含类型为Header或类型的对象Item。基本上,它解析cellForRowAtIndexPath上具有的类型。Swift数组(据我所知)只能处理一种类型。鉴于此,我们如何处理UITableView中要使用的两种不同类型?是否会有像DataObj这样的包装对象,我们每个工作都有可精巧的实例?
Header
Item
这是一种使用协议来组合两个类的方法:
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将数组中是允许的,所以您将获得额外的类型安全。
[AnyObject]
NSMutableArray
TableItem