Отсутствует return в функции, которая, как ожидается, вернет 'UICollectionViewCell - Swift - PullRequest
0 голосов
/ 19 октября 2018

У меня возникли некоторые проблемы с моим cellForItem, потому что я не знаю, как загрузить 3 представления коллекции одновременно.Это то, что я пытался, но я получаю сообщение об ошибке «Отсутствует возвращение в функции, которая должна вернуть« UICollectionViewCell ».

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

if collectionView == self.lostCollectionView {

        let lostcell: LostCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Lostcell", for: indexPath) as! LostCollectionViewCell

        lostcell.set(post: posts[indexPath.row])

        //Make TextView Clickable
        lostcell.phoneLostTextView.isEditable = false;
        lostcell.phoneLostTextView.dataDetectorTypes = UIDataDetectorTypes.phoneNumber

        return lostcell
    }

    if collectionView == self.foundCollectionView {

        let foundcell: FoundCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Foundcell", for: indexPath) as! FoundCollectionViewCell

        foundcell.set(postfound: postsfound[indexPath.row])

        //Make TextView Clickable
        foundcell.phoneFoundTextView.isEditable = false;
        foundcell.phoneFoundTextView.dataDetectorTypes = UIDataDetectorTypes.phoneNumber

        return foundcell
    }

    if collectionView == self.adoptionCollectionView {

        let adoptioncell: AdoptionCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Adopotioncell", for: indexPath) as! AdoptionCollectionViewCell

        adoptioncell.set(postadoption: postsadoption[indexPath.row])

        //Make TextView Clickable
        adoptioncell.phoneAdoptionTextView.isEditable = false;
        adoptioncell.phoneAdoptionTextView.dataDetectorTypes = UIDataDetectorTypes.phoneNumber

        return adoptioncell
    }
}

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Как указано значения-значения , это связано с отсутствующей ячейкой, в случае, если ни один из 3 if s не удовлетворены.

Вы можете добавить окончательную запасную ячейкув нижней части функции, как предложено значения-значения .

Или, вы можете пойти с другим подобным подходом, который я лично предпочел бы:

// Inside your **cellForItemAt** function.

switch collectionView {
    case lostCollectionView:
        // Replace this with your corresponding code.
        return LostCollectionViewCell()

    case foundCollectionView:
        // Replace this with your corresponding code.
        return FoundCollectionViewCell()

    case adoptionCollectionView:
        // Replace this with your corresponding code.
        return AdoptionCollectionViewCell()

    default:
        return UICollectionViewCell()
}

Я лично считаю коммутатор более подходящим решением для подобных случаев.

0 голосов
/ 19 октября 2018

В основном вам нужно будет включить свой код в оператор switch следующим образом:

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

    switch collectionView {
    case self.lostCollectionView:
        let lostcell: LostCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Lostcell", for: indexPath) as! LostCollectionViewCell

        lostcell.set(post: posts[indexPath.row])

        //Make TextView Clickable
        lostcell.phoneLostTextView.isEditable = false;
        lostcell.phoneLostTextView.dataDetectorTypes = UIDataDetectorTypes.phoneNumber

        return lostcell

    case self.foundCollectionView:
        let foundcell: FoundCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Foundcell", for: indexPath) as! FoundCollectionViewCell

        foundcell.set(postfound: postsfound[indexPath.row])

        //Make TextView Clickable
        foundcell.phoneFoundTextView.isEditable = false;
        foundcell.phoneFoundTextView.dataDetectorTypes = UIDataDetectorTypes.phoneNumber

        return foundcell

    case self.adoptionCollectionView:
        let adoptioncell: AdoptionCollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Adopotioncell", for: indexPath) as! AdoptionCollectionViewCell

        adoptioncell.set(postadoption: postsadoption[indexPath.row])

        //Make TextView Clickable
        adoptioncell.phoneAdoptionTextView.isEditable = false;
        adoptioncell.phoneAdoptionTextView.dataDetectorTypes = UIDataDetectorTypes.phoneNumber

        return adoptioncell

    default:
        return UICollectionViewCell()
    }
}
0 голосов
/ 19 октября 2018

Ваша функция имеет 3 if с.Если все они терпят неудачу, функция ничего не возвращает.По этой причине компилятор Swift жалуется.

Вы можете добавить return UICollectionViewCell() внизу функции.

Кроме того, оператор switch больше подходит для этой ситуации.

...