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
相关产品推荐
相关产品推荐

