2016-08-16 59 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 { 
    // ... 
}