Swift 3 warning func collectionView实例方法几乎匹配可选要求

时间:2016-12-11 15:12:28

标签: ios uicollectionview swift3

我正在将我的项目转换为Xcode 8.1中的Swift 3,我的一个集合视图函数返回一条警告消息,指示足迹已更改。代码是

 func collectionView(_ collectionView: UICollectionView, cellForItemAtIndexPath indexPath: IndexPath) -> UICollectionViewCell {

并且警告是

  

实例方法CollectionView(:CellForItemAtIndexPath :)几乎匹配协议UICollectionViewDelegate的可选需求collectionView(:canFocusItemAt :)

我相信这里的警告是红鲱鱼。我查找了API参考https://developer.apple.com/reference/uikit/uicollectionview/1618088-cellforitem,我看到了

func cellForItem(at indexPath: IndexPath) -> UICollectionViewCell?

但是,我无法在这些行中找到声明,这些声明不会导致带有红点的编译器错误。

编辑:

在下面的答案之后,我将数据源添加到我的ViewController类,如下所示:

class MyController: UIViewController,
                         UICollectionViewDelegateFlowLayout,
                         UICollectionViewDataSource,

然后在ViewDidLoad()我添加了此myCollectionView.dataSource = self

我现在有了这个

func collectionView(_ collectionView: UICollectionView,
                    cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

此视图控制器完全由代码构造,并且没有实现数据源,尽管有numberOfSectionsInCollectionView的代码在添加数据源之后生成了编译器红点。这已更新为

func numberOfSections(in collectionView: UICollectionView) -> Int {

1 个答案:

答案 0 :(得分:4)

  

我相信这里的警告是红鲱鱼

嗯,它不是。通常,处理编译器的方式是尊重;它通常比你知道的要多得多。你的https://developer.apple.com/reference/uikit/uicollectionview/1618088-cellforitem是红鲱鱼。

是您想要的功能:

https://developer.apple.com/reference/uikit/uicollectionviewdatasource/1618029-collectionview

如您所见,签名是:

func collectionView(_ collectionView: UICollectionView, 
    cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

......这与你最初的写作略有不同。

另外需要注意的是,必须在显式采用UICollectionViewDataSource的类声明中进行此声明。唯一的例外是如果这是一个UICollectionViewController,在这种情况下它已经采用了UICollectionViewDataSource - 在这种情况下,编译器会告诉你将override添加到你的声明中(你应该遵守)。