我正在将我的应用程序翻译成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泛型有更好理解的人能提出解决方案,我将非常感激。
答案 0 :(得分:7)
无需使用protocol<>
,因为编译器已经知道了。只需加入这样的协议:D: UITableViewDelegate & UITableViewDataSource
答案 1 :(得分:1)
setCollectionViewDataSourceDelegate
protected void registerbutton_Click(object sender, EventArgs e)
{
....
cmd.Parameters.Add("@password", SqlDbType.NVarChar).Value = myHash;
....
}