You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 2转Swift 3后TableView中IndexPath出现二元运算符错误

Swift 3升级后TableView didSelectRowAt 错误修复

嘿,我来帮你捋清楚这个问题!

错误到底啥意思?

你看到的报错‘二元运算符“==”无法应用于IndexPath和Int类型的操作数’,说白了就是你把一个IndexPath对象(代表表格里的行/列位置)直接和整数1做相等比较了,这俩不是同一种类型,Swift 3的类型检查很严格,肯定不让这么干。

之前你用Swift 2的时候是NSIndexPath,写法上可能有模糊的空间,但Swift 3把IndexPath改成了结构体,规则更明确了。你代码里的indexPath == 1明显是手滑写错了,本来应该是判断indexPath.row == 1对吧?

另外还有个隐藏问题:你原来的代码里第一个if判断了row == 0 或者错误的indexPath == 1,第二个if又单独判断row == 1,这样用户选中第2行(row从0开始计数)的时候,会先后触发两次performSegue,逻辑上肯定会出问题,这个也得一起修正。

修复后的代码

把你的didSelectRowAt方法改成下面这样就完全没问题了:

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    if indexPath.row == 0 {
        counter = 0
        self.performSegue(withIdentifier: "Day1", sender: self)
    } else if indexPath.row == 1 {
        counter = 1
        self.performSegue(withIdentifier: "Day2", sender: self)
    }
}

额外提两个小要点

  • Swift 3及以后的IndexPath已经自带row和section属性了,不用再转成NSIndexPath,直接写indexPath.row就行,代码更简洁。
  • 用else if代替两个独立的if,既能避免重复触发segue的问题,逻辑也更清晰,一看就知道每个row对应什么操作。

内容的提问来源于stack exchange,提问作者user5740195

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:41:12