我們正在將現有類從Objective-C遷移到Swift。在一個視圖控制器類中,我正在實現一個協議,並試圖添加視圖控制器作爲其中包含的對象的代表。當我嘗試添加「自我」爲對象的斯威夫特委託我得到以下編譯錯誤:Objective-C協議在Swift中未被識別
Cannot call value of non-function type '((ListenerProtocol) -> Void)?
這裏是的OBJ-C
@interface SomeViewController : UIViewController <ListenerProtocol> ...
現有實現並添加類作爲聽衆(代表)
[manager addListener:self];
這個工作沒有任何問題。但Swift版本看起來像是相同的代碼。這裏是斯威夫特版相同的呼叫:
@objc class SomeSwiftViewController: UIViewController, ListenerProtocol ...
並調用「的addListener」
manager?.addListener(self)
我已經通過檢查成功的是「自我」是在運行時ListenerProtocol對象驗證:
if self.conformsToProtocol(ListenerProtocol){
// ...
}
在包含委託屬性的對象中,addListener方法在Objective-C中定義如下:
- (void)addListener:(id<ListenerProtocol>)listener {
// ...
}
Swift類完全實現了ListenerProtocol中定義的所有方法。我不明白爲什麼這在Swift中不起作用。任何人都可以提出建議嗎?謝謝!
你可以顯示'manager.addListener'的定義? –