swift2 UITableView转换为Swift 3时出错

lymgl2op  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(232)

将一个旧的应用程序从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”,但我认为我的方法不对。

amrnrhlw

amrnrhlw1#

indexPath包含rowsection
你需要指定你是否想要indexPath.rowindexPath.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,则将执行Segue两次,结果不同。

vsmadaxz

vsmadaxz2#

因为在Swift 4中indexPath返回IndexPath,而(indexPath as NSIndexPath).row返回Int,所以你不能强制相等。而且你甚至不用像indexPath as NSIndexPath那样使用indexpath。indexPath.row就足够了

相关问题