Как я могу перевести мой быстрый тип данных в объект области - PullRequest
0 голосов
/ 29 января 2020

Я разработал небольшое приложение GPS-слежения в Swift, которое я запустил как проект времени выполнения для создания логики разбора c. Теперь я хочу сохранить данные в объектах Realm, но прежде чем я go через процесс рефакторинга, я хотел понять, нахожусь ли я на правильном пути.

У меня в настоящее время есть класс, который имеет функции чтобы манипулировать собой и хранить данные, это не соответствует различным моделям областей, которые я видел, где объект данных - просто хранилище данных.

class SkiTrack: NSObject, ObservableObject {

    var speed = Speed()
    var altitude = Altitude()
    var distance = Distance()

    var startTime = Date()
    var locationManager = CLLocationManager()
    var locationList: [Location] = []

    private var counter = SkiTrackSegmentCounter()
    private var history = LocationHistory()

    var trackSegments: [SkiTrackSegment] = []
    var currentSegment: SkiTrackSegment
    var unknownLocations: [Location] = []

    var numberOfLifts: Int = 0
    var numberOfRuns: Int = 0

    override init() {
        self.currentSegment = SkiTrackSegment()

        super.init()

        self.locationManager.delegate = self
    }

    public func receiveUpdate(newLocation: CLLocation) {

        // Do some management of the location and use it to update data in the class
        return
    }


    private func parse(_ newLocation: CLLocation) -> Location {
        let locationInfo = self.history.getCurrentLocationType(speed: newLocation.speed, course: newLocation.course, altitude: newLocation.altitude)

        return Location(core: newLocation, altitudeChange: locationInfo.altitudeChange, type: locationInfo.locationType)

    }

    private func updateDataObjects(location: Location) {
        if let lastLocation = self.locationList.last?.core {

            let delta = location.core.distance(from: lastLocation)
            let isLiftDistance = location.type == .lift
            distance.update(Measurement(value: delta, unit: UnitLength.meters), isLift: isLiftDistance)
        }
        speed.update(location.core.speed)
        altitude.update(location.core.altitude)
    }

    private func clearLocations() {
        self.unknownLocations.removeAll()
    }

}

// MARK: Delegated Location Receiver
extension SkiTrack: CLLocationManagerDelegate {

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        for newlocation in locations {
            let howRecent = newlocation.timestamp.timeIntervalSinceNow

            guard newlocation.horizontalAccuracy < 15 && abs(howRecent) < 5 else {
                print("Location Discarded: \(dump(newlocation))")
                continue
            }

            self.receiveUpdate(newLocation: newlocation)
        }

    }

    func locationManager(_ manager: CLLocationManager, didFailWithError: Error) {
        print(Error.self)
    }

}

Моя мысль состояла в том, чтобы превратить вышеуказанный класс в некий «Диспетчер данных», который просто управляет простым классом, который я создаю, храню и извлекаю из области. Это тот подход, который я должен использовать с Realm или я должен просто преобразовать свой класс «все в одном» в объект Realm?

Я пришел из SQL фона, поэтому возьмите модели баз данных classi c, и это итерация приложения, которое раньше использовало SQLite для хранения данных. Я просто не понимаю, как реализовать это в реальности.

Очень ценю любые советы и рекомендации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...