【问题标题】:Xcode Swift auto-complete shows wrong methodXcode Swift 自动完成显示错误的方法
【发布时间】:2015-10-17 19:46:11
【问题描述】:

我有以下课程:

class FooClass<A,B>: NSObject {

    func foo(a: A, b: B) { } 

}

class BarClass: FooClass<Int, Bool> { 

    override func foo(a: A, b: B) { }        //AUTO-COMPLETE'S PREVIEW SHOWS THIS, BUT COMPILER COMPLAINS "USE OF UNDECLARED TYPE 'A'"

    override func foo(a: Int, b: Bool) { }   //AUTO-COMPLETE'S PREVIEW DOESN'T SHOW THIS, BUT COMPILER APPROVES

}

自动完成预览显示错误,因为编译器不喜欢它。我是否错误地声明了我的一个类,还是需要修复自动完成功能?

【问题讨论】:

  • 似乎是自动完成的错误...
  • 如果编译器给你一个错误,那么是的,你错误地声明了BarClass。我在 Xcode 7 操场上测试了你的代码,自动完成显示我foo(a: Int, b: Bool)
  • @mixel 你能给出一个显示屏幕截图的答案吗?我的经验完全重现了 OP 的主张。我想看看你的反例。
  • @matt 我给出了答案。我希望我正确理解了 OP 的说法。
  • 我会说提交错误报告。

标签: xcode swift generics subclass type-alias


【解决方案1】:

感谢@matt 对 OP 问题的解释。

当您在BarClass 中覆盖FooClass.foo 时,自动完成必须显示foo(a: Int, b: Bool),但它显示foo(a: A, b: B),这似乎是一个错误:

此外,当您没有在 BarClass 中覆盖 FooClass.foo 并像 BarClass().foo 一样调用它时,自动完成也是错误的:

但是,如果您在 BarClass 中覆盖 FooClass.foo,那么自动完成是正确的:

【讨论】:

  • 但是我认为当 declaring foo 回到 BarClass definition 时,OP 正在谈论自动完成,而不是在 时稍后调用 foo。关键是因为只有第二个声明是合法的,那是自动完成应该提供的。但相反,它提供了第一个,这是非法的。
  • 感谢您的工作@mixel。 @matt 说我在 BarClass 定义中覆盖 foo 时遇到自动完成问题是正确的。我认为它在那里为您工作的原因是因为您已经正确定义了覆盖。我还有一个问题,如果你不介意的话。如果我不覆盖foo,我是否应该期望BarClass().foo 使用foo(a: A, b: B)foo(a: Int, b: Bool) 显示自动完成?如果您想更新它以反映当前对该问题的理解,我将很高兴接受您的回答@mixel。谢谢
  • 谢谢@mixel!我会提交错误报告。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 2015-10-10
  • 1970-01-01
相关资源
最近更新 更多