사용자 위치 가져오기
CLLocationManager로 위치 업데이트를 받습니다.
사용자 위치 가져오기은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
위치 업데이트 시작
권한이 부여되면 startUpdatingLocation()을 호출하여 위치 측정값을 연속적으로 받기 시작하세요. 관리자는 대리자를 통해 측정값을 전달합니다. 더 이상 필요하지 않을 때는 항상 stopUpdatingLocation()을 호출하여 배터리를 절약하세요.
manager.startUpdatingLocation()
// ... later
manager.stopUpdatingLocation()대리자에서 위치 수신
새로운 위치 측정값은 locationManager(_:didUpdateLocations:)에 전달됩니다. 배열은 오래된 값부터 최신 값 순서로 정렬되므로 마지막 요소가 가장 최근 위치입니다.
func locationManager(_ m: CLLocationManager,
didUpdateLocations locations: [CLLocation]) {
guard let latest = locations.last else { return }
print(latest.coordinate.latitude, latest.coordinate.longitude)
}CLLocation 객체
각 측정값은 좌표보다 훨씬 많은 정보를 포함하는 CLLocation 객체입니다. 여기에는 coordinate, altitude, speed, course, timestamp 및 정확도 값이 포함됩니다. 이러한 값을 확인하여 측정값을 사용할 만큼 충분히 정확한지 판단하세요.
func describe(_ loc: CLLocation) {
print("lat:", loc.coordinate.latitude)
print("lon:", loc.coordinate.longitude)
print("alt:", loc.altitude)
print("when:", loc.timestamp)
}원하는 정확도
desiredAccuracy를 설정하여 Core Location에 필요한 측정 정확도를 알려주세요. 정확도가 높을수록 더 많은 전력을 사용합니다. 상수로는 kCLLocationAccuracyBest, kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracyHundredMeters, kCLLocationAccuracyKilometer가 있습니다.
manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters거리 필터
distanceFilter를 사용하면 기기가 최소 몇 미터를 이동할 때까지 업데이트를 억제할 수 있습니다. 아주 작은 움직임까지 모두 알 필요가 없는 경우 이 기능으로 잡음을 줄이고 전력을 절약할 수 있습니다.
manager.distanceFilter = 50 // meters측정값 품질 판단
horizontalAccuracy 속성은 신뢰할 수 있는 범위의 반경을 미터 단위로 나타냅니다. 음수 값은 측정값이 유효하지 않다는 뜻입니다. 또한 timestamp가 얼마나 오래되었는지 확인하여 오래된 측정값도 거부하세요.
func isUsable(_ loc: CLLocation) -> Bool {
guard loc.horizontalAccuracy >= 0 else { return false }
let age = -loc.timestamp.timeIntervalSinceNow
return age < 15 && loc.horizontalAccuracy < 100
}단일 위치 요청
연속적인 위치 정보가 아니라 측정값 하나만 필요하다면 requestLocation()을 호출하세요. 관리자는 대리자에게 위치 하나를 전달한 다음 자동으로 중지합니다. 연속 업데이트를 시작하는 것보다 배터리 효율이 높습니다.
manager.requestLocation()위치 오류 처리
오류는 locationManager(_:didFailWithError:)에 전달됩니다. 흔히 발생하는 오류 중 하나는 CLError.locationUnknown이며, 대개 일시적이므로 계속 기다리면 됩니다. CLError.denied는 권한이 철회되었다는 뜻이므로 중지해야 합니다.
func locationManager(_ m: CLLocationManager,
didFailWithError error: Error) {
if let clErr = error as? CLError, clErr.code == .denied {
m.stopUpdatingLocation()
}
}주요 변화 모니터링
앱을 백그라운드에서 깨울 수 있는 저전력의 대략적인 추적이 필요하다면 startMonitoringSignificantLocationChanges()을 사용하세요. 기기가 약 500미터를 이동한 후에만 실행되므로 지역 기반 기능에 적합합니다.
manager.startMonitoringSignificantLocationChanges()방위와 진행 방향
나침반 기능을 위해 startUpdatingHeading()은 locationManager(_:didUpdateHeading:)을 통해 자기 방위 또는 진방위를 전달합니다. CLLocation.course(이동 방향)는 방위(기기의 방향)와 다르다는 점에 유의하세요.
func locationManager(_ m: CLLocationManager,
didUpdateHeading newHeading: CLHeading) {
print("Heading:", newHeading.trueHeading)
}두 지점 간 거리 계산
CLLocation은 distance(from:)을 사용하여 다른 위치까지의 직선거리를 측정하고 미터 단위로 반환할 수 있습니다. 지도 UI 없이 근접성 로직을 구현할 때 유용합니다.
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)빠른 확인: 위치 가져오기
위치 측정값을 받는 방법을 얼마나 이해했는지 확인해 보세요.
복습: 사용자 위치 가져오기
이제 좌표를 가져오는 방법을 알고 있습니다.
- 연속적인 위치 정보에는
startUpdatingLocation()을, 측정값 하나에는requestLocation()을 사용합니다. - 대리자에서
locations.last를 읽어 가장 최신 측정값을 가져옵니다. - 전력 소비와 정확도 사이의 균형을 위해
desiredAccuracy와distanceFilter를 조정합니다. - 측정값을 사용하기 전에
horizontalAccuracy와timestamp를 검증합니다.
자주 묻는 질문
“사용자 위치 가져오기” 강의는 무료인가요?
네 — “사용자 위치 가져오기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“사용자 위치 가져오기”에서 뭘 배우나요?
CLLocationManager로 위치 업데이트를 받습니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“사용자 위치 가져오기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 위치 권한 요청하기
- 사용자 위치 가져오기
- SwiftUI에서 지도 표시하기
- 지오코딩과 지역