Мне нужно создать подкласс CLHeading, чтобы сделать некоторые его свойства доступными для записи (CLHeading имеет только конструктор по умолчанию и его свойства доступны только для чтения).
import CoreLocation
class WritableCLHeading: CLHeading {
private var _trueHeading: CLLocationDirection = 0.0
private var _timestamp: Date = Date()
init(trueHeading: CLLocationDirection) {
self._trueHeading = trueHeading
self._timestamp = Date()
super.init()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
}
open override var trueHeading: CLLocationDirection {
get {
return _trueHeading
}
set {
self._trueHeading = newValue
}
}
open override var timestamp: Date {
get {
return _timestamp
}
set {
self._timestamp = newValue
}
}
}
var head: CLHeading = WritableCLHeading(trueHeading: 30.0)
// CRASH: error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0x20).
assert(head.trueHeading == 30.0)
Также происходит сбой, если я комментирую эти строки:
self._trueHeading = trueHeading
self._timestamp = Date()
Возможно ли это сделать, или мне нужно создать собственный бизнес-объект. Вместо этого вместо всего моего исходного кода и связанного с ним CLHeading <-> Логотип преобразования заголовков c?