swift - 无法用@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 泛型在 Objective-C 中是不可表示的。
这就是您收到此错误的原因,尽管AnyObject
它对 Objective-C 有效。
如果可以,请删除泛型:
class Animator: NSObject {
@objc open func animation(vc1: AnyObject, vc2: AnyObject, container: UIView, duration: Double) {
// ...
}
}
推荐阅读
- node.js - 有条件的要求快递?
- c++ - 未从同一目录加载 C++ PDB 符号
- java - 当用户打开安卓应用程序时如何隐藏欢迎屏幕?
- html - HTML 表头无法居中,带有引导模式表数据
- azure-data-factory-2 - 如何在具有函数的动态表达式中转义单引号?
- swift - 来回使用两个按钮的字符串数组
- entity-framework-core - 如何将可为空的 tinyint 列映射到在 EF Core 中 null 变为 false 的布尔值?
- php - 在 Magento 2 管理员的自定义模块中获取 Order_ID
- android - viewpager 未在可滚动布局下显示
- javapackager - 可以使用 javapackager 部署 jlinked 运行时吗?