我UIView為閉包初始化添加了一些擴展:
protocol ClosureInitialization: UIView {
associatedtype View = Self
init(_ configurationClosure: (View) -> ())
}
extension ClosureInitialization {
init(_ configurationClosure: (Self) -> ()) {
self.init(frame: .zero)
configurationClosure(self)
}
}
extension UIView : ClosureInitialization {}
多虧了它,我可以更輕松地初始化視圖,例如:
private lazy var myLabel = UILabel {
$0.text = "Label"
$0.textColor = .myTextColor
$0.font = .myFont
}
升級到 XCode 13.3 / 13.3.1 后,它停止編譯。我得到的唯一錯誤資訊是:error: Illegal instruction: 4。更重要的是,使用 XCode 13.2.1 一切編譯都沒有錯誤。
uj5u.com熱心網友回復:
看起來 Xcode 不喜歡這里ClosureInitialization的回圈繼承:繼承自UIView并UIView宣告ClosureInitialization.
你可以這樣寫:
protocol ClosureInitialization {
associatedtype View = Self
init(_ configurationClosure: (View) -> ())
}
extension ClosureInitialization where Self: UIView {
init(_ configurationClosure: (Self) -> ()) {
self.init(frame: .zero)
configurationClosure(self)
}
}
extension UIView: ClosureInitialization {}
var myLabel = UILabel {
$0.text = "Label"
$0.textColor = .black
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/459935.html
