首页 > 解决方案 > 无法用@objc 标记方法,参数无法在Objective-C 中表示

问题描述

我想标记方法@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())

标签: swift

解决方案


Swift 泛型在 Objective-C 中是不可表示的。
这就是您收到此错误的原因,尽管AnyObject它对 Objective-C 有效。

如果可以,请删除泛型:

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

推荐阅读