我必须在Objective-C库的数据源协议中实现这个方法
(nullable id<SomeClass>)someMethod;
我试图在我的类中用Swift实现它,特别是AppDelegate,我相信它与签名保持相等
extension AppDelegate: LIBDataSource {
@objc func someMethod<T: SomeClass>() -> T? {
return nil // temporary
}
}
问题是
事实上,我有一个警告和一个错误。错误显示
Method cannot be marked @objc because it has generic parameters
(下面还显示警告)如果删除
@objc
,则警告显示Non-@objc method 'someMethod()' cannot satisfy optional requirement of @objc protocol LIBDataSource
有没有办法在Swift中实现Obj-C协议的通用Obj-C方法?或者我必须单独上一节C级目标课来完成这个任务?
最佳答案
语法
id<SomeClass>
与轻量级泛型无关,它意味着“任何Objective-C类只要符合协议就可以”。您的方法不需要是泛型的,但它确实需要返回符合
SomeClass
协议的对象。它的签名应该是func someMethod() -> SomeClass?
关于objective-c - 在Swift中使用轻量级泛型实现Objective-C方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40719419/