我正在将我的应用程序转换为 Swift 3。我偶然发现了一个问题,即使用一种干净的方式为 UITableViewCell 中的 UICollectionView 设置数据源和委托(delegate),描述 here .
代码如下:
func setCollectionViewDataSourceDelegate<D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>>
(_ dataSourceDelegate: D, forRow row: Int) {
collectionView.delegate = dataSourceDelegate
collectionView.dataSource = dataSourceDelegate
collectionView.tag = row
collectionView.reloadData()}
它会发出警告,说明:
'protocol<...>' composition syntax is deprecated; join the protocols using '&'
当我接受建议的解决方案时,它会更改 D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>
进入 D: (UICollectionViewDatasource & UICollectionViewDelegate)
调用,而是抛出一个错误:
Expected a type name or protocol composition restricting 'D'
如果比我更了解 Swift 3 泛型的人可以提出解决方案,我将不胜感激。
最佳答案
无需使用protocol<>
因为编译器已经知道了。只需像这样加入协议(protocol):D: UITableViewDelegate & UITableViewDataSource
关于Swift 3 泛型 : issue with setting UICollectionViewDatasource & Delegate for a UICollectionView inside UITableViewCell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40702791/