Swift 3泛型:设置UICollectionViewDatasource&的问题在UITableViewCell中委托UICollectionView

时间:2016-11-20 10:07:40

标签: swift uitableview generics uicollectionview swift3

我正在将我的应用程序翻译成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()}

它会发出警告,说明:

  

'协议&LT; ...&GT;'不推荐使用组合语法;使用'&amp;'

加入协议

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

  

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

如果对Swift 3泛型有更好理解的人能提出解决方案,我将非常感激。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

swift3

setCollectionViewDataSourceDelegate

protected void registerbutton_Click(object sender, EventArgs e)
{
  ....
  cmd.Parameters.Add("@password", SqlDbType.NVarChar).Value = myHash;
  ....
}