我有一个类
class Presenter<T: UIViewController where T: protocol<ViewInput, ViewController>>: NSObject
{
override init()
{
super.init()
Layer.sharedInstance.service.addListener(self)
}
}
我想Presenter
符合另一个Protocol
并编写一个扩展:
extension Presenter: OneMoreProtocol
{
func doSomething()
{
self.update()
}
}
但这会导致错误:在为源文件发出 IR 时 ..../演示者.swift(分段错误)
该协议看起来:
@objc protocol OneMoreProtocol: AnyObject
{
optional func doSomething()
}
因此,如果我删除扩展名,则错误:在这种情况下,上面描述的addListener
会引发此错误:参数类型"表示器"不符合预期类型"OneMoreProtocol"
我怎样才能以正确的方式进行顺从?
现在我想我更好地理解了这个问题。您添加的新协议标有@objc属性。然后,您必须使用如下所示的@objc标记扩展演示器中的方法:
@objc func doSomething()
但是你现在有一个更大的问题:"泛型类的扩展不支持@objc。
我不确定您最终要实现的目标,但一个简单的技巧是协议扩展。
protocol OneMoreProtocol
{
func doSomething()
}
extension OneMoreProtocol {
func doSomething() {}
}
现在你有一个用于doSomething的空实现,所以你不必在采用协议的任何地方编写一个实现。