Swift 3泛型:在UITableViewCell中为UICollectionView设置UICollectionViewDatasource和Delegate的问题

mic*_*nin 3 generics uitableview uicollectionview swift swift3

我在翻译我的应用程序斯威夫特3.我在一个问题,用设置数据源和委托一个UITableViewCell内UICollectionView,描述了一个干净的方式跌跌撞撞的过程在这里.

代码如下:

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

collectionView.delegate = dataSourceDelegate
collectionView.dataSource = dataSourceDelegate
collectionView.tag = row
collectionView.reloadData()}
Run Code Online (Sandbox Code Playgroud)

它会发出警告,说:

'protocol <...>'组合语法已弃用; 使用'&'加入协议

当我接受建议的解决方案时,它会更改D: protocol<UICollectionViewDataSource, UICollectionViewDelegate>为一个D: (UICollectionViewDatasource & UICollectionViewDelegate)调用,而是抛出一个错误:

预期限制'D'的类型名称或协议组成

如果对Swift 3仿制药有更好理解的人可以提出解决方案,我将非常感激.

kie*_*tux 7

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

  • 不知道为什么Xcode建议在括号中修复抛出,只是删除它们修复了问题.非常感谢! (2认同)