В своем приложении я читаю события календаря типа EKEvent и сделал расширение с большим количеством вычисляемых переменных, поэтому я могу легко получить продолжительность, количество человеко-часов и т. д. для каждого события в календаре. Но в больших масштабах производительность плохая, поэтому вместо этого я хочу использовать ленивые переменные, чтобы кэшировать все мои дополнительные данные.
Поэтому я хочу создать подкласс EKEvent, называемый CustomEvent, который добавляет ленивые переменные, но моя проблема в том, что EKEventStore всегда возвращает EKEvents, и мне нужно преобразовать его в экземпляры моего подкласса CustomEvent, чтобы иметь возможность получить доступ к ленивым варам и т. д.
Простого приведения типов недостаточно, и я попробовал на игровой площадке посмотреть, что может сработать, но ничего полезного не получил. Мне нужен специальный конструктор для CustomRectangle, который может инициализировать CustomRectangle из NativeRectangle. Альтернативным решением является создание класса-оболочки, который содержит исходный объект как свойство, но это не было бы моим любимым решением, поскольку тогда мне пришлось бы отображать все методы и свойства.
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)