簡體   English   中英

在UIColor子類中設置屬性時崩潰

[英]Crash when setting property in UIColor subclass

我目前正在嘗試創建UIColor的子類,因為我需要為它添加幾個屬性來豐富它。 一旦嘗試在子類上設置任何自定義屬性,該應用就會崩潰,並顯示EXC_BAD_ACCESS異常。 這是預期的嗎? 我想念什么嗎?

這是我嘗試過的代碼:

class MyColorClass: UIColor {

    var customProperty: String!

    convenience init(fromColor color: UIColor) {
        self.init(cgColor: color.cgColor)
        self.customProperty = "rgfgb" // crash
    }

}

MyColorClass(fromColor: UIColor.black)

游樂場示例: https//ufile.io/ejmrwst4

因此,在深入研究之后,我發現了以下內容:

怎么了

因此,似乎很難對UIColor進行子類化,因為它是所謂的“類集群”的一部分。 本文對它的描述非常好。

問題的要點在於,Apple內部有UIColor幾個(私有)子類, UIColor本身被設計為抽象工廠類,它向您返回了一個具體的子類。 蘋果在這里描述了這一切。 因此,如果您將UIColor子類化,則某些功能會丟失,因為它不能直接使用。

解決方案

從理論上講,可以創建類集群類的子類。 Apple在鏈接的文章中對此進行了描述。 但是,這很痛苦,因為您需要實現UIColor所有方法並將對它們的調用轉發到有效的UIColor實例。 另外,我無法使它與UIColor ,因為它的某些必需的初始化程序是在擴展中定義的,您無法覆蓋它。

因此,最簡單的方法是只創建一個包裝UIColor屬性的包裝器類。 這不像子類那么優雅,因為您不能使用自定義類來代替UIColor ,但是它可以工作:

class MyColor {

    var base: UIColor

    ....
}

let myColor = MyColor()
/* we can't use myColor as a UIColor, but have to use myColor.base instead */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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