Ошибка UITableView при конвертации в Swift 3 - PullRequest
0 голосов
/ 21 февраля 2019

Обновление старого приложения с swift 2.2 до swift 4. Я должен использовать swift 3 в качестве трамплина.Я преобразовал в 3, но столкнулся со следующей ошибкой:

Двоичный оператор '==' не может быть применен к операндам типа 'IndexPath' и 'Int`

.код:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if (indexPath as NSIndexPath).row == 0 || indexPath == 1 {
        self.performSegue(withIdentifier: "NFL", sender: self)
    }

    if (indexPath as NSIndexPath).row == 1 {
        self.performSegue(withIdentifier: "AFL", sender: self)
    }

    if (indexPath as NSIndexPath).row == 2 {
        self.performSegue(withIdentifier: "FAI", sender: self)
    }

    if (indexPath as NSIndexPath).row == 3 {
        self.performSegue(withIdentifier: "IPA", sender: self)
    }
}

Почему я получаю эту ошибку в Swift 3, а не в 2.2?Я пытался заставить его «Int», но не думаю, что я поступил правильно.

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Beacause indexPath возвращает IndexPath в Swift 4 и (indexPath as NSIndexPath).row возвращает Int, так что вы не можете заставить их равняться. Также вы даже не используете indexpath, как indexPath as NSIndexPath.indexPath.row достаточно

0 голосов
/ 21 февраля 2019

indexPath содержит row и section

, вам необходимо указать, хотите ли вы indexPath.row или indexPath.section

, если вы действительно имели в виду indexPath.row, ваш полныйкод должен выглядеть следующим образом:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if indexPath.row == 0 || indexPath.row == 1 {
            self.performSegue(withIdentifier: "NFL", sender: self)
        }


        if indexPath.row == 1 {
            self.performSegue(withIdentifier: "AFL", sender: self)
        }

        if indexPath.row == 2 {
            self.performSegue(withIdentifier: "FAI", sender: self)
        }

        if indexPath.row == 3 {
            self.performSegue(withIdentifier: "IPA", sender: self)
        }
}

Советы:

Вам не нужно приводить к NSIndexPath

Для этогоВ целях сравнения вы должны использовать оператор switch вместо множества операторов if.

Если indexPath.row == 1, то он будет выполнять Seg дважды с разными результатами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...