私のアプリでは、タイプEKEventのカレンダーイベントを読んでいました。計算されたvarsがたくさんあるエクステンションを作ったので、カレンダーの各イベントの長さ、工数などを簡単に取得できます。しかし、大規模ではパフォーマンスが悪いので、代わりにすべての余分なデータをキャッシュするために、レイジー・ヴァルを使用したいと考えています。スーパークラスのインスタンスでサブクラスを初期化するにはどうすればいいですか?
私はEKEventのサブクラスを作成したいと思っています。カスタムイベントは、怠惰なvarsを追加しますが、私の問題は、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
ありがとうございます - 私はラッパークラスを作成し、プロパティをマップする必要があります、私は推測する...私はより洗練されたソリューションを望んでいた。 width * heightのシンプルな "キャッシング"は例のためのものでした... –