我正在把我的应用程序翻译成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