Я разработал небольшое приложение 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 для хранения данных. Я просто не понимаю, как реализовать это в реальности.
Очень ценю любые советы и рекомендации.