У меня есть Objective-C протокол, который используется в основном объектами-C и одним или двумя объектами Swift.Расширение протокола по протоколу ObjC
Я хотел бы расширить протокол в Swift и добавить 2 функции. Один для регистрации для уведомления, а другой - для обработки уведомления.
Если добавить эти
func registerForPresetLoadedNotification() {
NSNotificationCenter.defaultCenter().addObserver(self as AnyObject,
selector: #selector(presetLoaded(_:)),
name: kPresetLoadedNotificationName,
object: nil)
}
func presetLoaded(notification: NSNotification) {
}
Я получаю сообщение об ошибке на #selector, который говорит 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
Я также не может отмечать расширение протокола как @objc
Когда я создаю протокол Objective-C как Swift протокол. Я получаю ту же ошибку.
Есть ли способ достичь этого, который будет работать для классов Objective-C и Swift, которые используют протокол?
Как насчет расширения протокола и определения этих функций как функций _optional_ в Objective-C и их реализации в Swift? Просто мысль. – skim
Моя идея состояла в том, чтобы реализовать функцию регистров в расширении, а затем переопределить функцию обработчика уведомлений в классах «цель-с» и «быстрый». Мне нужно установить параметры в объектных классах c, реализуя их в Swift wont work. – jarryd
Я не уверен, что правильно вас понимаю. Похоже, что вы хотите расширить (добавить функции в существующий протокол) и обеспечить реализацию по умолчанию в ObjC и переопределить часть этой реализации в Swift. Это верно? – skim