我正在将我的项目转换为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 {
答案 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
添加到你的声明中(你应该遵守)。