Так оно и должно работать. Тернарный оператор не означает эквивалент регулярного оператора if
. Телами if
и else
являются утверждения , а части, следующие за ?
и :
, являются выражениями , которые должны оцениваться одним и тем же типом .
Иными словами: a = b ? c : d
не должен быть эквивалентен if (b) a = c; else a = d;
. Вместо этого b ? c : d
является выражением само по себе, а присвоение его результата a
не повлияет на результат.
Это - это простое:
import UIKit
class ActualGradientButton: UIButton {
override func layoutSubviews() {
super.layoutSubviews()
gradientLayer.frame = bounds
}
private lazy var gradientLayer: CAGradientLayer = {
let l = CAGradientLayer()
l.frame = self.bounds
l.colors = [UIColor.systemYellow.cgColor, UIColor.systemPink.cgColor]
l.startPoint = CGPoint(x: 0, y: 0.5)
l.endPoint = CGPoint(x: 1, y: 0.5)
l.cornerRadius = 16
layer.insertSublayer(l, at: 0)
return l
}()
}