【问题标题】:Override func error in Swift 2覆盖 Swift 2 中的 func 错误
【发布时间】:2015-06-17 12:54:57
【问题描述】:

XCode 6 中的此代码没有错误,但在 XCode 7 (Swift 2) 中出现此错误:

方法不会覆盖其超类中的任何方法

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        /* Called when a touch begins */

}

当删除 override 字时出现此错误:

使用 Objective-C 选择器 'touchesBegan:withEvent:' 的方法 'touchesBegan(:withEvent:)' 与具有相同目标的超类 'UIResponder' 的方法 'touchesBegan(:withEvent:)' 冲突-C 选择器

【问题讨论】:

    标签: swift swift2


    【解决方案1】:

    您遇到了第一个错误,因为 Cocoa Touch 的大部分内容已经过审核以支持 Objective-C 泛型,这意味着现在可以键入数组和集合等元素。因此,此方法的签名已更改,并且由于您编写的内容不再与此匹配,因此您会收到一个错误,说明您已将方法标记为 override 但实际上并不匹配超类中的任何方法。

    然后,当您删除 override 关键字时,您得到的错误是让您知道您创建的方法与真正的接触开始方法具有冲突的 Objective-C 选择器(与 Swift 不同,Objective- C 不支持方法重载)。

    最重要的是,在 Swift 2 中,您的 touchs started override 应该如下所示。

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        // stuff
    }
    

    有关 Objective-C 泛型对您的 Swift 代码意味着什么的更多信息,我建议您查看 Using Swift with Cocoa and Objective-C 的预发布版本中的轻量级泛型部分。截至目前在第 33 和 34 页。

    【讨论】:

      【解决方案2】:

      只需删除 override 即可。

      func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
              /* Called when a touch begins */
      
      }
      

      【讨论】:

        猜你喜欢
        • 2015-06-29
        • 1970-01-01
        • 2015-11-14
        • 1970-01-01
        • 2018-03-26
        • 2017-03-16
        • 1970-01-01
        • 2015-07-10
        • 2017-11-20
        相关资源
        最近更新 更多