我必须在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/

10-14 23:04
查看更多