我有一个班级
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 .... / Presenter.swift(分段错误)
该协议看起来:
@objc protocol OneMoreProtocol: AnyObject
{
optional func doSomething()
}
因此,如果我删除扩展名,则错误:addListener
上面描述的错误会抛出此错误:
参数类型'Presenter'不符合预期类型'OneMoreProtocol'
如何以正确的方式进行整合?
答案 0 :(得分:0)
现在我想我更清楚这个问题。您添加的新协议标有@objc属性。然后,您必须使用@objc在扩展程序Presenter中标记方法,如下所示:
@objc func doSomething()
但是现在你遇到了一个更大的问题:&#34;泛型类的扩展中不支持@objc。&#34;
我不确定你到底想要实现什么,但一个简单的技巧就是协议扩展。
protocol OneMoreProtocol
{
func doSomething()
}
extension OneMoreProtocol {
func doSomething() {}
}
现在你有一个doSomething的空实现,所以你不必在采用协议的地方编写实现。