代码转换 swift 2 --> 3 导致索引路径处的二进制运算符错误

Posted

技术标签:

【中文标题】代码转换 swift 2 --> 3 导致索引路径处的二进制运算符错误【英文标题】:Code conversion swift 2 --> 3 resulting in binary operator error at index path 【发布时间】:2019-06-04 06:33:08 【问题描述】:

使用 Xcode 7 和 swift 2。 应用程序运行良好。 更新到 Xcode 8。它自动从 swift 2 --> swift 3 转换代码。 现在我的表格视图的代码有问题。

这行代码出错:

if (indexPath as NSIndexPath).row == 0 || indexPath == 1 
        counter = 0
        self.performSegue(withIdentifier: "Day1", sender: self)

正如它所说,二元运算符'=='不能应用于操作数类型'index path'和'int'

这是什么意思,我该如何解决?

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

    if (indexPath as NSIndexPath).row == 0 || indexPath == 1 
        counter = 0
        self.performSegue(withIdentifier: "Day1", sender: self)
    

    if (indexPath as NSIndexPath).row == 1 
        counter = 1
        self.performSegue(withIdentifier: "Day2", sender: self)
    

【问题讨论】:

indexPath == 1 甚至在 Swift 2 中都不起作用。如果该行是 1,那么是否打算同时执行两个 segue?? 【参考方案1】:

错误来自这段代码

indexPath == 1

你需要得到它的row属性,它的类型是Int

indexPath.row == 1

另请注意,无需将IndexPath 转换为NSIndexPath

indexPath.row

那么我认为您可能不想在第一个 if 语句中检查第二个条件,因为在这种情况下,第二个 if 语句不会按照您的意愿执行

if indexPath.row == 0

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 2 --> 3 导致索引路径处的二进制运算符错误的主要内容,如果未能解决你的问题,请参考以下文章

导致“无法将不可变作为 inout 传递”的 Swift 3 转换 [重复]

从 Swit2.3 到 Swift3 的转换导致“以 NSException 类型的未捕获异常终止”

将 swift 2.3 转换为 swift 3 错误

导致错误的 Swift 3 更新

将swift 2视频代码转换为swift 3视频代码

从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext