2016-08-16 5 views
0

私は2つのUICollectionViewCellを持っています。私は2つを区別したいと思います。私のRetroItemCollectionViewCellには "configureFor"というメソッドがあります。何らかの理由で私がそれをキャストしたとしても、私は "configureFor"関数を呼び出すことができません。スウィフトでのキャストの問題

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

' is'は変数をキャストしません。変数が特定の型であるかどうかをランタイムチェックするだけです。 – HAS

+0

しかし、私は内部で使用しています –

答えて

3

あなたはas?オペレータとして

ザ・探していますか?演算子は、式の条件付きキャストを指定された型に実行します。として?演算子は、指定された型のオプションを返します。実行時に、キャストが成功すると、expressionの値はオプションでラップされて返されます。それ以外の場合、返される値はnilです。 - 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 { 
    // ... 
}