问题
我想创建一个只能由某个类实现的协议。
示例
比方说,有一个协议X
,所以只有类A
可以符合它:
A:X
每个X
都是A
,但不是每个A
都是X
。
实践示例
我想创建一个CollectionViewCell
描述符,用于定义CellClass
,其reuseIdentifier
和可选value
将该描述符传递给控制器中的相应单元格:
协议
protocol ConfigurableCollectionCell { // Should be of UICollectionViewCell class
func configureCell(descriptor: CollectionCellDescriptor)
}
控制器的
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
}
现在我需要强制转换以消除错误,如ConfigurableCollectionCell != UICollectionViewCell
。
答案 0 :(得分: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
}