2016-08-16 4 views
0

두 개의 UICollectionViewCell이 있는데이 두 가지를 구별하고 싶습니다. 내 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 { 
    // ... 
}