我有一个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