2015-10-17 55 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