2016-12-11 1 views
2

Я конвертирую свой проект в Swift 3 в Xcode 8.1, и одна из моих функций просмотра коллекций возвращает предупреждающее сообщение, указывающее, что след изменился. КодSwift 3 warning func collectionView метод экземпляра почти соответствует необязательному требованию

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

и предупреждение

метод Instance CollectionView (: CellForItemAtIndexPath :) почти соответствует факультативное требование CollectionView (: canFocusItemAt :) протокола UICollectionViewDelegate

Я считаю, предупреждение - это красная селедка. Я посмотрел ссылку 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 полностью сконструированный в коде и не реализован источник данных, хотя там был код numberOfSectionsInCollectionView который произвел компилятор красную точку после того, как был добавлен источник данных. Это была обновлена ​​

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

ответ

3

Я считаю, что предупреждение является отвлекающим маневром здесь

Ну, это не так. Обычно подход к обработке компилятора с уважением; он обычно знает значительно больше, чем вы. Ваша 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 к вашей декларации (и вы должны повиноваться).

Смежные вопросы