我正在把我的应用程序翻译成Swift 3。我偶然发现了一个问题,即在uiTableViewCell中使用一种干净的方式为uiCollectionView设置数据源和委托,如here所述。
代码如下:

func setCollectionViewDataSourceDelegate<D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>>
(_ dataSourceDelegate: D, forRow row: Int) {

collectionView.delegate = dataSourceDelegate
collectionView.dataSource = dataSourceDelegate
collectionView.tag = row
collectionView.reloadData()}

它发出警告,说:
不推荐使用“protocol”组合语法;请使用“&”加入协议
当我接受建议的解决方案时,它会将D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>更改为D: (UICollectionViewDatasource & UICollectionViewDelegate)调用,而是抛出一个错误:
应输入限制“d”的类型名或协议组合
如果有人比我更了解Swift 3仿制药,我会非常感激他能提出解决方案。

最佳答案

不需要使用protocol<>,因为编译器已经知道了这一点。像这样加入协议:D: UITableViewDelegate & UITableViewDataSource

09-26 09:01