在我的應用我讀類型EKEvent的日曆事件,我已經做了很多計算瓦爾的擴展,這樣我就可以輕鬆搞定的持續時間,工時數等,在日曆中的每個事件。但在大規模情況下,性能很差 - 所以我想使用懶惰變量來緩存所有額外的數據。如何用它的超類的實例啓動我的子類?
因此,我想創建EKEvent的一個子類 - 稱爲CustomEvent,它添加了懶惰的變量,但是我的問題是EKEventStore總是返回EKEvents,我需要將它轉換爲我的CustomEvent子類的實例,按順序要能夠訪問懶瓦爾等
一個簡單的類型轉換是不夠的,我試過在一個操場上,看看有什麼可以工作,但什麼也沒得到有用。我需要一個CustomRectangle的特殊構造函數,它可以從NativeRectangle初始化一個CustomRectangle。另一種解決方案是使持有原來的對象作爲屬性的包裝類,但是這不會是我最喜歡的解決方案,因爲我接下來要映射所有的方法和屬性
class NativeRectangle: NSObject {
var width: Int
var height: Int
init(width: Int, height: Int) {
self.width = width
self.height = height
super.init()
}
}
class CustomRectangle: NativeRectangle {
var area: Int { return width * height}
}
let rect = NativeRectangle(width: 100, height: 20)
let customRect = CustomRectangle(rect) // This fails, i need a constructor
print(customRect.area)
構圖通常是我不得不這樣做時想到的第一個想法。 – Abizern
謝謝 - 當我不得不做一個包裝類和映射屬性時,我想......我希望有一個更優雅的解決方案。寬度*高度的簡單「緩存」就是這個例子...... –