![](/img/trans.png)
[英]Cannot override open method declared in class extension in another module swift
[英]Override class variable declared in the superclass's extension in Swift
是Swift 5.0.1或Xcode的錯誤嗎?
這在Xcode 10.2.1的操場上。
這些代碼是:
extension UIColor {
@objc class var myGolden: UIColor {
return self.init(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.900)
}
}
print(UIColor.myGolden)
class MyUIColor: UIColor {
override class var myGolden: UIColor {
return super.init(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.750)
}
}
print(MyUIColor.myGolden)
操場上沒有指出MyUIColor
類的任何錯誤
輸出為:
UIExtendedSRGBColorSpace 1 0.894 0.541 0.9
libc ++ abi.dylib:以類型為NSException的未捕獲異常終止
並且運行時錯誤顯示:
錯誤:執行被中斷,原因:信號SIGABRT。 該進程已被中斷,請使用“線程返回-x”返回到表達式求值之前的狀態。
更改self.init
和super.init
調用UIColor.init
修復該問題。 僅應分別從便捷性初始化程序或子類初始化程序調用self.init
和super.init
,當在計算屬性或任何其他函數中創建類的實例時,應使用類型名稱而不是self
或init調用init方法。 super
。
extension UIColor {
@objc class var myGolden: UIColor {
return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.9)
}
}
print(UIColor.myGolden)
class MyUIColor: UIColor {
override class var myGolden: UIColor {
return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.75)
}
}
print(MyUIColor.myGolden)
問題不在於類變量的覆蓋,而是對self.init
和super.init
的不正確使用。 您應該按以下方式更改代碼:
extension UIColor {
@objc class var myGolden: UIColor {
return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.900)
}
}
print(UIColor.myGolden)
class MyUIColor: UIColor {
override class var myGolden: UIColor {
return UIColor(red: 1.000, green: 0.894, blue: 0.541, alpha: 0.750)
}
}
print(MyUIColor.myGolden)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.