Pobieranie lokalizacji użytkownika
Odbieranie aktualizacji lokalizacji za pomocą CLLocationManager.
Pobieranie lokalizacji użytkownika to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.
Uruchamianie aktualizacji lokalizacji
Po uzyskaniu autoryzacji wywołaj startUpdatingLocation(), aby rozpocząć odbieranie ciągłego strumienia pomiarów lokalizacji. Menedżer przekazuje je za pośrednictwem delegata. Gdy aktualizacje nie są już potrzebne, zawsze wywołuj stopUpdatingLocation(), aby oszczędzać baterię.
manager.startUpdatingLocation()
// ... later
manager.stopUpdatingLocation()Odbieranie lokalizacji w delegacie
Nowe pomiary są dostarczane w locationManager(_:didUpdateLocations:). Tablica jest uporządkowana od najstarszego do najnowszego elementu, dlatego ostatni element zawiera najnowszą lokalizację.
func locationManager(_ m: CLLocationManager,
didUpdateLocations locations: [CLLocation]) {
guard let latest = locations.last else { return }
print(latest.coordinate.latitude, latest.coordinate.longitude)
}Obiekt CLLocation
Każdy pomiar jest obiektem CLLocation zawierającym znacznie więcej niż same współrzędne: coordinate, altitude, speed, course, timestamp oraz wartości dokładności. Należy przeanalizować te dane, aby określić, czy pomiar jest wystarczająco dobry.
func describe(_ loc: CLLocation) {
print("lat:", loc.coordinate.latitude)
print("lon:", loc.coordinate.longitude)
print("alt:", loc.altitude)
print("when:", loc.timestamp)
}Żądana dokładność
Ustaw desiredAccuracy, aby określić wymaganą precyzję pomiarów dla Core Location. Większa dokładność zużywa więcej energii. Dostępne stałe to między innymi kCLLocationAccuracyBest, kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracyHundredMeters i kCLLocationAccuracyKilometer.
manager.desiredAccuracy = kCLLocationAccuracyNearestTenMetersFiltr odległości
Użyj distanceFilter, aby wstrzymać aktualizacje, dopóki urządzenie nie przemieści się o co najmniej określoną liczbę metrów. Ogranicza to szum i oszczędza energię w przypadkach, które nie wymagają rejestrowania każdego niewielkiego ruchu.
manager.distanceFilter = 50 // metersOcena jakości pomiaru
Właściwość horizontalAccuracy określa promień obszaru ufności w metrach. Wartość ujemna oznacza nieprawidłowy pomiar. Należy również odrzucać nieaktualne pomiary, sprawdzając, jak dawno został zarejestrowany znacznik timestamp.
func isUsable(_ loc: CLLocation) -> Bool {
guard loc.horizontalAccuracy >= 0 else { return false }
let age = -loc.timestamp.timeIntervalSinceNow
return age < 15 && loc.horizontalAccuracy < 100
}Pobieranie pojedynczej lokalizacji
Jeśli potrzebny jest tylko pojedynczy pomiar, a nie ciągły strumień, wywołaj requestLocation(). Menedżer przekaże jedną lokalizację do delegata, a następnie automatycznie się zatrzyma. Jest to rozwiązanie bardziej oszczędne dla baterii niż uruchamianie ciągłych aktualizacji.
manager.requestLocation()Obsługa błędów lokalizacji
Błędy są zgłaszane w locationManager(_:didFailWithError:). Częstym błędem jest CLError.locationUnknown, który zazwyczaj ma charakter przejściowy — należy nadal czekać. CLError.denied oznacza cofnięcie uprawnień i konieczność zatrzymania aktualizacji.
func locationManager(_ m: CLLocationManager,
didFailWithError error: Error) {
if let clErr = error as? CLError, clErr.code == .denied {
m.stopUpdatingLocation()
}
}Monitorowanie znaczących zmian
Do śledzenia zgrubnej lokalizacji przy niskim zużyciu energii, które może wybudzić aplikację w tle, użyj startMonitoringSignificantLocationChanges(). Aktualizacja jest wywoływana dopiero po przemieszczeniu się urządzenia o około 500 metrów, dlatego rozwiązanie to dobrze sprawdza się w funkcjach zależnych od regionu.
manager.startMonitoringSignificantLocationChanges()Kierunek i kurs
W przypadku funkcji kompasu startUpdatingHeading() dostarcza kierunek magnetyczny lub geograficzny za pośrednictwem locationManager(_:didUpdateHeading:). Należy pamiętać, że CLLocation.course (kierunek przemieszczania się) różni się od kierunku urządzenia, czyli jego orientacji.
func locationManager(_ m: CLLocationManager,
didUpdateHeading newHeading: CLHeading) {
print("Heading:", newHeading.trueHeading)
}Obliczanie odległości między punktami
CLLocation może zmierzyć odległość w linii prostej do innej lokalizacji za pomocą distance(from:), zwracając wynik w metrach. Jest to przydatne przy implementowaniu logiki bliskości bez jakiegokolwiek interfejsu mapy.
let a = CLLocation(latitude: 41.0, longitude: 28.9)
let b = CLLocation(latitude: 41.1, longitude: 29.0)
let meters = a.distance(from: b)
print("Distance:", meters)Szybki test: pobieranie lokalizacji
Proszę sprawdzić, czy rozumieją Państwo odbieranie pomiarów lokalizacji.
Podsumowanie: pobieranie lokalizacji użytkownika
Wiedzą już Państwo, jak uzyskiwać współrzędne:
startUpdatingLocation()służy do odbierania strumienia pomiarów, arequestLocation()do pobrania pojedynczego pomiaru.- Najnowszy pomiar należy odczytywać z
locations.lastw delegacie. - Należy dostosować
desiredAccuracyidistanceFilter, równoważąc zużycie energii i precyzję. - Przed użyciem pomiaru należy sprawdzić wartości
horizontalAccuracyitimestamp.
Ucz się Swift dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 122
- Lekcje
- 409
Często zadawane pytania
Czy lekcja „Pobieranie lokalizacji użytkownika” jest bezpłatna?
Tak — pełny tekst „Pobieranie lokalizacji użytkownika” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Pobieranie lokalizacji użytkownika”?
Odbieranie aktualizacji lokalizacji za pomocą CLLocationManager. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Swift Academy?
Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Pobieranie lokalizacji użytkownika”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?
Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Żądanie uprawnień do lokalizacji
- Pobieranie lokalizacji użytkownika
- Wyświetlanie map w SwiftUI
- Geokodowanie i regiony