将一个旧的应用程序从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条答案
按热度按时间amrnrhlw1#
indexPath
包含row
和section
你需要指定你是否想要
indexPath.row
或indexPath.section
如果您实际上是指
indexPath.row
,那么完整代码应该如下所示:提示:
您不需要强制转换为
NSIndexPath
为了进行比较,您应该使用
switch
陈述式,而不要使用许多if
陈述式。如果
indexPath.row == 1
,则将执行Segue两次,结果不同。vsmadaxz2#
因为在Swift 4中indexPath返回
IndexPath
,而(indexPath as NSIndexPath).row
返回Int
,所以你不能强制相等。而且你甚至不用像indexPath as NSIndexPath
那样使用indexpath。indexPath.row
就足够了