如何使用子类符合协议

时间:2016-05-28 22:00:35

标签: swift class protocols subclass conform

说我有协议

protocol A: class {
  func configure(view: UIView)
}

现在我想使用UILabel作为UIView

的子类来符合此协议
final class B: A {
  init() {}

  func configure(view: UILabel) {

  }
}

但错误

  

B类不符合协议A

似乎Swift需要与协议中所述的完全相同的类型。这工作

final class B: A {
  init() {}

  func configure(view: UIView) {

  }
}

但我想使用UILabel,如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

您可以使用约束为associatedType类型的UIView

protocol A: class {
    associatedtype View: UIView
    func configure(view: View)
}

现在在课程B中,由于UILabelUIView的子类,所以可以这样做:

final class B: A {
    init() {}

    func configure(view: UILabel) {
        ...
    }
}