Я новичок в кодировании и придумал эту проблему. Я делаю приложение af trashcanfinder на основе MapKit, и я хотел бы показать расстояние от местоположения пользователя до моих контактов на карте. Я уже сделал свою функцию для преобразования CLLocationCoordinate2D в CLLocation и функцию, чтобы показывать расстояние от одной точки до другой, но я не могу использовать местоположение пользователя вне функции locationmanager.Как использовать местоположение пользователя из функции locationmanager swift 3
Это мой код:
@IBOutlet weak var mapView: MKMapView!
let manager = CLLocationManager()
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let location = locations[0]
let span:MKCoordinateSpan = MKCoordinateSpanMake(0.01, 0.01)
let myLocation = CLLocationCoordinate2DMake(location.coordinate.latitude, location.coordinate.longitude)
let region:MKCoordinateRegion = MKCoordinateRegionMake(myLocation, span)
mapView.setRegion(region, animated: true)
self.mapView.showsUserLocation = true
}
func distancePointToPoint(location1: CLLocationCoordinate2D, location2: CLLocationCoordinate2D) -> String {
let cllocation1 = converter(location: location1)
let cllocation2 = converter(location: location2)
let distance = cllocation1.distance(from: cllocation2)
let shortDistance = distance - distance.truncatingRemainder(dividingBy: 0.1) //makes sure there is only one number behind comma
if shortDistance < 0 {
return "The distance is \(shortDistance) meters"
}
else {
return "The distance is \(shortDistance - (shortDistance/1000).truncatingRemainder(dividingBy: 0.1)) kilometers"
}
}
Поэтому мне нужно использовать местоположение пользователя в качестве LOCATION1 в функции distancePointToPoint.
Я знаю, что с любой другой функцией я мог бы просто вернуть значение, но у меня нет никаких значений, чтобы дать функции locationmanager, поскольку он получит его от самого устройства.
Я уже провел исследование, и единственный другой способ, который я нашел, - поместить переменную myLocation за пределы функции и только изменить значение внутри функции, но xcode начинает жаловаться, что класс не имеет инициализатора и я не знаю, что делать.
Извините, если я сделал какие-то глупые ошибки, так как я только начал изучать код.
Любая помощь приветствуется!
вы можете добавить аннотацию местоположения пользователя за пределы didupdatelocation, для этого в первую очередь вам нужно хранить lat и long текущего местоположения в userdefault, а затем использовать его вне функции, таким образом, вы сможете обрабатывать его только один раз –
Спасибо за ваш ответ! Не могли бы вы объяснить немного больше, что мне нужно сделать? Как я уже сказал, я довольно полный новобранец в этой области и не понимаю ничего, кроме чистого кода для детей. –
решила проблему? –