Swift - 分段错误,符合协议



我有一个类

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的空实现,所以你不必在采用协议的任何地方编写一个实现。

相关内容

最新更新