簡體   English   中英

如何在Swift中為UITableView處理數組中的兩種不同類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM