Создание объекта CLHeading с пользовательскими значениями - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно создать подкласс 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?

...