我有一個Objective-C協議,主要用於Objective-C對象和一個或兩個Swift對象。在ObjC協議上的協議擴展
我想在Swift中擴展協議並添加2個函數。一個註冊通知,另一個處理通知。
如果我添加這些
func registerForPresetLoadedNotification() {
NSNotificationCenter.defaultCenter().addObserver(self as AnyObject,
selector: #selector(presetLoaded(_:)),
name: kPresetLoadedNotificationName,
object: nil)
}
func presetLoaded(notification: NSNotification) {
}
我得到它說Argument of '#selector' refers to a method that is not exposed to Objective-C
如果我然後標記presetLoaded爲@objc
我得到它說@objc can only be used with members of classes, @objc protocols, and concrete extensions of classes
我也是一個錯誤的#selector錯誤不能將協議擴展標記爲@objc
當我創建Objective-C協議作爲Swift協議我得到同樣的錯誤。
有沒有一種方法可以實現這一點,將使用協議的Objective-C和Swift類?
如何擴展協議並將這些函數定義爲_optional_ functions在Objective-C中並在Swift中實現它們?只是一個想法。 – skim
我的想法是在擴展中實現註冊函數,然後覆蓋objective-c和swift類中的通知處理函數。我需要在objective-c類中設置參數,在Swift中實現它們不會工作。 – jarryd
我不確定我是否正確理解你。這聽起來像你想要做的是擴展(添加功能到現有的協議),並在ObjC中提供一個默認實現,並在Swift中重寫該實現的一部分。它是否正確? – skim