Учитывать
extension UIView {
static var Trick: UIIView {
let v = UIView()
v.backgroundColor = .yellow
return v
}
}
отсюда addSubview(UIView.Trick)
и так далее.
Однако
private lazy var yellowLabel: UILabel = {
let v = UILabel.Typical
v.font = U.systemFont(ofSize: 200)
return v
}()
конечно неправильно. Есть ли способ......
extension V where V is one of the UIView types {
static var Trick: V {
let v = " V "()
v.backgroundColor = .yellow
return v
}
}
Есть ли способ?
Тип вычисляемого свойства в расширении класса может быть Self
, чтобы указать конкретный тип, для которого вызывается свойство. Также Self()
создает экземпляр этого конкретного типа:
extension UIView {
static var Trick: Self {
let v = Self()
v.backgroundColor = .yellow
return v
}
}
Сейчас
private lazy var yellowLabel: UILabel = {
let v = UILabel.Trick // <-- Type of `v` is UILabel
v.font = .systemFont(ofSize: 200)
return v
}()
компилируется и работает как положено.