Function bodies 2 total
LocationManager class · swift · L3-L47 (45 LOC)SwissStation/LocationManager.swift
final class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
private var continuation: CheckedContinuation<CLLocation, Error>?
override init() {
super.init()
manager.delegate = self
manager.desiredAccuracy = kCLLocationAccuracyHundredMeters
}
var authorizationStatus: CLAuthorizationStatus {
manager.authorizationStatus
}
func requestLocation() async throws -> CLLocation {
let status = manager.authorizationStatus
if status == .notDetermined {
manager.requestWhenInUseAuthorization()
// Wait briefly for the authorization dialog
try await Task.sleep(nanoseconds: 1_000_000_000)
}
guard manager.authorizationStatus == .authorized ||
manager.authorizationStatus == .authorizedAlways else {
throw LocationError.denied
}
return try await withCheckedThrowingContinuation { continuaStationService class · swift · L5-L220 (216 LOC)SwissStation/StationService.swift
final class StationService: ObservableObject {
@Published var departures: [Departure] = []
@Published var stationName: String = "Basel, Birmannsgasse"
@Published var isLoading = false
@Published var error: String?
@Published var searchResults: [Station] = []
@Published var locationStatus: String?
@Published var showStationInMenuBar: Bool {
didSet { UserDefaults.standard.set(showStationInMenuBar, forKey: "showStationInMenuBar") }
}
@Published var refreshInterval: TimeInterval {
didSet {
UserDefaults.standard.set(refreshInterval, forKey: "refreshInterval")
startAutoRefresh()
}
}
@Published var enabledTransports: Set<String> {
didSet {
UserDefaults.standard.set(Array(enabledTransports), forKey: "enabledTransports")
Task { await fetchDepartures(force: true) }
}
}
static let allTransports: [(id: String, label: String)] = [
("tram", "Tram"),