簡體   English   中英

覆蓋在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.initsuper.init調用UIColor.init修復該問題。 僅應分別從便捷性初始化程序或子類初始化程序調用self.initsuper.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.initsuper.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM