Consider
extension UIView {
static var Trick: UIIView {
let v = UIView()
v.backgroundColor = .yellow
return v
}
}
hence addSubview(UIView.Trick)
and so on.
However
private lazy var yellowLabel: UILabel = {
let v = UILabel.Typical
v.font = U.systemFont(ofSize: 200)
return v
}()
of course is wrong. Is there a way to ......
extension V where V is one of the UIView types {
static var Trick: V {
let v = " V "()
v.backgroundColor = .yellow
return v
}
}
Is there a way?
The type of the computed property in a class extension can be Self
to specify the concrete type on which the property is called. Also Self()
creates an instance of that concrete type:
extension UIView {
static var Trick: Self {
let v = Self()
v.backgroundColor = .yellow
return v
}
}
Now
private lazy var yellowLabel: UILabel = {
let v = UILabel.Trick // <-- Type of `v` is UILabel
v.font = .systemFont(ofSize: 200)
return v
}()
compiles and works as expected.