【问题标题】:Confusing compile error trying to upgrade to Swift 1.2尝试升级到 Swift 1.2 的令人困惑的编译错误
【发布时间】:2015-04-10 17:35:13
【问题描述】:

我已经能够毫无问题地更新我的 XCode 6.3 和 Swift 1.2 代码,直到我尝试从 UIHandler 修复我被覆盖的触摸输入函数。我将所有四个触摸功能的签名更新为以下内容:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    super.touchesBegan(touches, withEvent: event)
    ...
}

override func touchesMoved(touches: Set<NSObject>, withEvent event: UIEvent) {
    super.touchesMoved(touches, withEvent: event)
    ...
}
override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) {
    ...
}
override func touchesCancelled(touches: Set<NSObject>!, withEvent event: UIEvent) {
    ...
}

XCode 的自动完成功能实际上在我编写这些方法/签名时会提示它们,所以我知道 XCode 可以识别 Swift 1.2。但是,当我清理和构建时,我得到所有四个函数的“方法不会覆盖其超类中的任何方法”,以及在调用这些函数的“超级”版本时出现类似错误。

我在项目/构建设置中没有发现任何突出的内容,我尝试清除 DerivedData 文件夹并重新启动计算机,但仍然出现这些错误。

【问题讨论】:

    标签: ios xcode macos swift


    【解决方案1】:

    所以我遇到了和你一样的错误信息,这让我发疯了。我终于弄清楚了问题所在......如果你按照我在网上做的相同教程,它可能也会得到你。

    原来我有一个名为 Set.swift 的 swift 文件……它定义了一个名为 Set 的类。

    但现在在 Swift 1.2 中,他们引入了自己的名为 Set 的类,所以无论我在哪里使用 Set,我的类都会引起冲突和这些错误(主要是在 touchesXXX 部分,但在代码中还有一个地方我使用了 Set,这就是我的线索)。所以我只是进入了 Set.swift,并将该类重命名为其他名称,然后一切都开始正确编译。

    希望有帮助!

    【讨论】:

    • 是的,我也有!我敢打赌就是这样。谢谢!
    【解决方案2】:

    您是否尝试过彻底清理项目(CMD + ALT + SHIFT + K)?

    我必须这样做才能编译它。

    【讨论】:

    • 是的!它没有解决问题。
    • 你想覆盖什么类?我会在最后测试它。
    • 我正在覆盖 SKScene。
    • 是的,这对我来说没有问题。首先,命令单击 super.touchesbegan 以查看 SKScene 是否确实已更新。如果是,则使用新的类名创建 SKScene 文件的副本,以查看您的项目是否未正确编译该文件
    【解决方案3】:

    超级函数调用必须在最后:

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
    
        \\ Your code
    
    
        super.touchesBegan(touches, withEvent: event)
    
    }
    

    【讨论】:

    • 感谢您的提醒,但这不会导致编译错误吗?
    • @heyx3 我做到了,没有错误。你试过了吗?
    • 还没有;直到星期一才能真正再次尝试。
    • 不,它没有,这是一个糟糕的建议,值得一票否决
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 2018-03-14
    相关资源
    最近更新 更多