2016-07-26 6 views
0

質問は、特定のクラスがスウィフトにプロトコルに準拠することを許可する

私は唯一の特定のクラスで実装することができ、プロトコルを作成したいと思います。

クラスのみAがそれに適合することができるようにのは、プロトコルXがある、としましょう:

A:X 

すべてXAですが、すべてのAXではありません。

具体例

Iは CellClassを定義 CollectionViewCellディスクリプタを作成したい

そのコントローラに適切な細胞に記述reuseIdentifierおよび任意valueパス:

プロトコル

protocol ConfigurableCollectionCell { // Should be of UICollectionViewCell class 
    func configureCell(descriptor: CollectionCellDescriptor) 
} 

C

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let descriptor = dataSource.itemAtIndexPath(indexPath) 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(descriptor.reuseIdentifier, forIndexPath: indexPath) as! ConfigurableCollectionCell 
    cell.configureCell(descriptor) 
    return cell as! UICollectionViewCell 
    } 

ontroller今私はConfigurableCollectionCell != UICollectionViewCellとして、エラーを取り除くためにキャストを強制する必要があります。

+0

なぜサブクラス? – Wain

答えて

0

は、プロトコルにキャストし、別の変数を使用して修正:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let descriptor = dataSource.itemAtIndexPath(indexPath) 

    // Cast to protocol and configure 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(descriptor.reuseIdentifier, forIndexPath: indexPath) 
    if let configurableCell = cell as? ConfigurableCollectionCell { 
     configurableCell.configureCell(descriptor) 
    } 
    // Return still an instance of UICollectionView 
    return cell 
    } 
関連する問題