2015-07-21 36 views
-1

我正在用Objective-C編寫的應用程序中工作,我們希望開始將一些Swift集成到它中。在Swift中無法識別Objective-C協議

我在Swift中編寫了一個簡單的視圖控制器類,爲了在應用程序中工作,它必須符合Objective-C中編寫的協議。在我的Swift類中,我有以下聲明:

@objc class SwfViewController: UIViewController, theProtocolName { 
    //some code 
} 

在我的橋接頭文件中,我有引用的協議的類名。

#import "theProtocolName.h" 

我已經實現了所有的協議中列出的所需的方法,但我仍然得到一個錯誤說

SwfViewController不符合協議「theProtocolName」

我對Swift來說相當新穎,並且可以輕鬆地排除一些東西。有什麼建議檢查什麼?謝謝!

+0

請問您可以添加協議的代碼和SwfViewController的實現嗎?很可能你已經聲明SwfViewController中的方法是錯誤的。 – agy

回答

2

您應該考慮到方法的Swift簽名與objective-c略有不同。例如:

像這樣的協議:

@protocol MyProtocol <NSObject> 

    - (void)didFinish:(MyClass *)class withError:(id)errorMessage; 

@end 

符合該協議在斯威夫特一類應該是:

@objc class SwfViewController: UIViewController, MyProtocol { 
    func didFinish(whatEveryouWant1: UIViewController!, withError whatEverYouWant2: AnyObject!){ 

    } 
} 

請注意標識符成爲AnyObject和對象 - 引用翻譯與!作爲隱含的解包選項。

0

通常,這個錯誤意味着你的類缺少必需的方法,這是協議點的一部分。這個班似乎意識到它需要遵循你所說的協議,但現在需要定義所需的部分。

您應該可以通過點擊錯誤信息來找出哪些部分丟失。

+1

「您應該可以通過點擊錯誤消息來找出哪些部分丟失。」 < - 我不認爲你可以在Swift中做到這一點。 – nhgrif