Xcode Swift自动完成显示错误的方法

Xcode Swift自动完成显示错误的方法,xcode,swift,generics,subclass,type-alias,Xcode,Swift,Generics,Subclass,Type Alias,我有以下课程: 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 UNDECLARE

我有以下课程:

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

}
class-FooClass:NSObject{
func-foo(a:a,b:b){}
}
类BarClass:FooClass{
重写func-foo(a:a,b:b){}//AUTO-COMPLETE的预览显示了这一点,但编译器抱怨“使用了未声明的类型‘a’”
override func-foo(a:Int,b:Bool){}//AUTO-COMPLETE的预览不会显示此内容,但编译器会批准
}

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

感谢@matt对OP问题的解释

当您在
BarClass
中重写
FooClass.foo
时,自动完成必须显示
foo(a:Int,b:Bool)
,但它显示
foo(a:a,b:b)
,这似乎是一个bug:

另外,如果您没有在
BarClass
中重写
FooClass.foo
,并像
BarClass()那样调用它,那么foo
自动完成也会出错:

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

似乎是自动完成的错误…如果编译器给您一个错误,那么是的,您错误地声明了
BarClass
。我在Xcode 7游乐场测试了你的代码,自动完成显示我
foo(a:Int,b:Bool)
@mixel你能给出一个显示屏幕截图的答案吗?我的经验准确地再现了OP的说法。“我想看看你的反例。”马特我回答道。我希望我正确理解了OP的声明。我会说提交一份bug报告。但我认为OP在BarClass定义中声明
foo
时谈论的是自动完成,而不是稍后调用foo时。关键是,因为只有第二个声明是合法的,所以auto complete应该提供这个声明。但是它提供了第一个,这是非法的。谢谢你的工作@mixel@matt说得对,我在BarClass定义中重写
foo
时遇到了自动完成问题。我认为它对您有效的原因是因为您已经正确定义了覆盖。如果你不介意的话,我还有一个问题。如果我不重写
foo
,我是否应该期望
BarClass().foo
显示自动完成的
foo(a:a,b:b)
foo(a:Int,b:Bool)
?如果您想更新您的答案以反映当前对该问题的理解,我很乐意接受@mixel。谢谢你,谢谢你!我将提交一份错误报告。