2016-08-16 132 views
0

我有兩個UICollectionViewCells,我想區分兩者。我的RetroItemCollectionViewCell有一個名爲「configureFor」的方法。由於某些原因,即使我施放了它,我也無法調用「configureFor」函數。在Swift中投射問題

var cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) 

     if cell is RetroItemCollectionViewCell { 

      cell = cell as! RetroItemCollectionViewCell 
      let retroItem = self.retroItems[indexPath.row] 
      cell.configureFor(retroItem: retroItem) 

     } else if cell is RetroItemAddCollectionViewCell { 

     } 

我在做什麼錯?

UPDATE:

var cell :UICollectionViewCell! 

// check if the cell is the add cell 
if indexPath.row == 0 { 

    cell = collectionView.dequeueReusableCell(withReuseIdentifier: addRetroItemCollectionViewCellReuseIdentifier, for: indexPath) as! RetroItemAddCollectionViewCell 


} else { 

    // HOW DO I CONVERT THE cell to RetroItemCollectionViewCell 

    let retroItem = self.retroItems[indexPath.row] 

    cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! RetroItemCollectionViewCell 

} 
+2

'如果讓細胞=小區作爲? RetroItemCollectionViewCell {' – tktsubota

+1

'''不會轉換變量,它只是運行時檢查變量是否屬於特定類型。 – HAS

+0

但我在裏面使用的是 –

回答

3

您要搜索的as?操作

的作爲?運算符將表達式的條件轉換執行爲指定的類型。 as?運算符返回指定類型的可選項。在運行時,如果轉換成功,表達式的值被包裝在一個可選的並返回;否則,返回的值爲零。 - Swift Language Reference

var cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) 

if let cell as? RetroItemCollectionViewCell { 
    let retroItem = self.retroItems[indexPath.row] 
    cell.configureFor(retroItem: retroItem) 
} else if let cell as? RetroItemAddCollectionViewCell { 
    // ... 
}