Невозможно пометить метод с помощью @objc, параметр не может быть представлен в Objective-C - PullRequest
1 голос
/ 11 июля 2019

Я хочу отметить метод @objc, чтобы проверить в objc-runtime, если этот метод переопределен.

class Animator<VC1: AnyObject, VC2: AnyObject>: NSObject  {
    @objc open func animation(vc1: VC1, vc2: VC2, container: UIView, duration: Double) {
        // .. 
    }
}

Но получите эту ошибку:

Метод не может быть помечен @objc, поскольку тип параметра 1 не может быть представлен в Objective-C

PS Я видел предыдущие вопросы по SO, но они мне не помогли

Редактировать:

Может быть, возможно узнать, прежде чем вызов переопределен ли этот метод?Пользователь этой библиотеки может переопределить этот метод.Так что внутри lib я могу делать все, что захочу.

if (!self.checkIsAnimOverridden()) {
  self.view.snapshot()
}
self.animation(vc1: vc1, vc2: vc2, container: container, duration: self.getDuration())

1 Ответ

0 голосов
/ 11 июля 2019

Обобщения Swift не представлены в Objective-C.
Вот почему вы получаете эту ошибку, хотя AnyObject действительно для Objective-C.

Если можете, удалите универсальный:

class Animator: NSObject {
    @objc open func animation(vc1: AnyObject, vc2: AnyObject, container: UIView, duration: Double) {
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...