Swift 3 警告 func collectionView 实例方法几乎符合可选要求
Posted
技术标签:
【中文标题】Swift 3 警告 func collectionView 实例方法几乎符合可选要求【英文标题】:Swift 3 warning func collectionView instance method nearly matches optional requirement 【发布时间】:2016-12-11 15:12:28 【问题描述】:我正在将我的项目转换为 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
这个 View Controller 完全是用代码构建的,并且没有实现数据源,尽管有 numberOfSectionsInCollectionView
的代码在添加数据源后产生了编译器红点。这已更新为
func numberOfSections(in collectionView: UICollectionView) -> Int
【问题讨论】:
尝试将它们设置为public
。
【参考方案1】:
我认为这里的警告是一个红鲱鱼
好吧,事实并非如此。通常对待编译器的方式是尊重;它通常比你知道的多得多。您的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
(你应该遵守)。
【讨论】:
以上是关于Swift 3 警告 func collectionView 实例方法几乎符合可选要求的主要内容,如果未能解决你的问题,请参考以下文章
Xcode8/Swift 3 更新后缺少 Firebase 标头警告
升级到 Xcode 8 并将语法从 swift 2.3 转换为 swift 3.0 后文件丢失警告
XCode6 Beta 中的编译器警告 - “速记外部参数名称”
Swift 3:覆盖成为FirstResponder时警告“未使用的调用结果”