CoreLocation을 사용하여 사용자의 현재 위치 (문자열)를 가져 오는 클래스 UserLocation (아래) & 위도 및 경도 API로 전달).계속 진행하기 전에 객체 인스턴스화를 기다려야합니다.
아래 코드는 작동하지만 클래스를 초기화 할 때 나머지 코드는 초기화가 완료 될 때까지 기다리지 않으므로 위치 관련 값을 할당 할 수 없습니다. 검색하려고합니다.
이 방법을 사용하면 (또는 다른 "MVC"조직에 대해 더 생각해야합니다.) 그렇다면 초기화를 위해 코드가 완료되도록하려면 어떻게해야합니까 (위치 찾기 & 역 지오 코딩). 계속 전진해라. 클래스의 init에 지정된 @ closure의 일종으로 초기화 아래에 코드를 두는 방법이 있습니까? 나는 신속하게 당신의 친절한 조언을 주셔서 감사합니다. ViewController.swift의 viewDidAppear()에서
:
let userLocation = UserLocation() // initializes properly but code below doesn't wait.
locationsArray[0].name = userLocation.place
locationsArray[0].coordinates = userLocation.coordinates
그리고 내 UserLocation.swift 클래스 :
import Foundation
import CoreLocation
class UserLocation {
var place = ""
var coordinates = ""
let locationManager = CLLocationManager()
var currentLocation: CLLocation!
init() {
returnResults()
}
func returnResults() {
getUserLocation { placemark in
if placemark != nil {
self.place = (placemark?.name)!
self.coordinates = "\((placemark?.location?.coordinate.latitude)!),\((placemark?.location?.coordinate.longitude)!)"
} else {
print("Error retrieving placemark")
}
}
}
func getUserLocation(completion: @escaping (CLPlacemark?) ->()) {
var placemark: CLPlacemark?
locationManager.requestWhenInUseAuthorization()
if (CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedWhenInUse ||
CLLocationManager.authorizationStatus() == CLAuthorizationStatus.authorizedAlways) {
currentLocation = locationManager.location
let geoCoder = CLGeocoder()
geoCoder.reverseGeocodeLocation(currentLocation) { (placemarks, error) -> Void in
if error != nil {
print("Error getting location: \(error)")
placemark = nil
} else {
placemark = placemarks?.first
}
completion(placemark)
}
}
}
}
extension CLPlacemark {
var cityState: String {
var result = ""
switch (self.locality, self.administrativeArea, self.country) {
case (.some, .some, .some("United States")):
result = "\(locality!), \(administrativeArea!)"
case (.some, _ , .some):
result = "\(locality!), \(country!)"
default:
result = name ?? "Location Unknown"
}
return result
}
}
엄청난 감사 - 정확히 내가 필요로하는 것. 구문에 대한 아주 명확한 설명. 매우 감사! – Gallaugher
@Gallaugher 기꺼이 도와 드리겠습니다. – Cristik