[英]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.