2015-10-17 58 views
2

我有以下类别:的Xcode雨燕自动完成显示错误的方法

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 

} 

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

+1

看起来像一个自动完成的错误... –

+0

如果编译器给你一个错误,那么是的,你声明'BarClass'不正确。我在Xcode 7操场上测试了你的代码,并自动完成向我展示'foo(a:Int,b:Bool)'。 – mixel

+0

@mixel你能给出一个显示屏幕截图的答案吗?我的经验确切地再现了OP的声明。我想看看你的反例。 – matt

回答

1

感谢@matt解释OP的问题。

自动完成必须表现出foo(a: Int, b: Bool)当你重写BarClassFooClass.foo但它表明foo(a: A, b: B)这似乎是一个错误: Screenshot of bug

此外,当你不BarClass覆盖FooClass.foo并调用它像BarClass().foo自动完成功能也有错: enter image description here

但是,如果你在BarClass覆盖FooClass.foo然后自动完成正确的是: enter image description here

+1

但我认为OP正在讨论当_declaring_'foo'返回BarClass _definition_时的自动完成,而不是以后的_calling_ foo。关键在于,因为只有第二个声明是合法的,那就是自动完成应该提供的声明。但是,它提供了第一个,这是非法的。 – matt

+1

感谢您的工作@mixel。 @matt在说我在BarClass定义中重写'foo'时遇到了自动完成问题是正确的。我认为它为你工作的原因是因为你已经正确定义了覆盖。 我还有一个问题,如果你不介意。如果我不重写'foo',我应该期望'BarClass()。foo'用'foo(a:A,b:B)'或'foo(a:Int,b:Bool )'?如果您想更新它以反映当前对该问题的理解,我很乐意接受@mixel的答案。谢谢 – user2320861

+1

谢谢@mixel!我将提交一份错误报告。 – user2320861