2015-06-10 24 views
2

我們正在考慮將應用程序從obj-c移植到Swift。一個問題是我們在obj-c代碼中有一個UITableView,它的對象是HeaderItem類型的對象。基本上,它解決了它在cellForRowAtIndexPath中的哪種類型。 Swift Arrays(據我所知) 只能處理單一類型。鑑於此,我們如何處理UITableView中使用的兩種不同類型?包裝對象像DataObj那裏我們有每個工作的nillable實例?如何在Swift中爲UITableView處理數組中的兩種不同類型

+1

你可以使用NSMutableArray/NSArray嗎? –

+0

嗯...所以...可能,但似乎是一個臨時sol'n一點,除非,我錯了(並且誠實地不是一個全職的iOS開發)。我敢肯定,大多數項目都必須解決這個問題。將使用NSMutablreArray是規範的選擇?這感覺有點像在腳本語言中使用'exec'。 – timpone

回答

6

下面是一個使用的協議團結你的兩個類的方法獲取對象的類型:

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 { 
     println("it is a Header") 
    } else if item is Item { 
     println("it is an Item") 
    } 
} 

的這種過度[AnyObject]NSMutableArray的優點是,只有其中的類實現TableItem將被允許在您的陣列中,因此您可以獲得額外的類型安全性。

0

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 

} 
相關問題