繁体   English   中英

如何使用子类符合协议

[英]How to conform to protocol using subclass

说我有一个协议

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 ,如何解决这个问题?

您可以使用被限制为UIView类型的associatedType类型。

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

现在在B类中,因为UILabelUIView的子类,所以可以这样做:

final class B: A {
    init() {}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM