[英]how to handle two different types in an Array in Swift for a UITableView
我們正在考慮將應用程序從obj-c遷移到Swift。 一個問題是我們的obj-c代碼中有一個UITableView,它具有Header
類型或Item
類型的對象。 基本上,它解析了它在cellForRowAtIndexPath中的類型。 Swift Arrays(據我所知)只能處理一種類型。 鑒於此,我們如何處理UITableView中使用的兩種不同類型? 像DataObj這樣的包裝器對象我們每個工作都有可用的實例嗎?
這是一種使用協議來統一兩個類的方法:
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
的類,因此您可以獲得額外的類型安全性。
Swift數組可以存儲不同類型的對象。 為此,您必須聲明為AnyObject數組
var array:[AnyObject] = []
在cellForRowAtIndexPath
之后,您可以使用可選的展開來獲取對象類型
if let header = array[indexPath.row] as? Header{
//return header cell here
}else{
let item = array[indexPath.row] as! Item
// return item cell
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.