说我有协议
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
,如何解决这个问题?
答案 0 :(得分:5)
您可以使用约束为associatedType
类型的UIView
。
protocol A: class {
associatedtype View: UIView
func configure(view: View)
}
现在在课程B
中,由于UILabel
是UIView
的子类,所以可以这样做:
final class B: A {
init() {}
func configure(view: UILabel) {
...
}
}