簡體   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