Определение расстояния между текущим местоположением и другим местоположением (Swift 5)

Я не программист, но играю с побочным проектом для удовольствия. Я использую Xcode 10, Swift 5. Я собрал несколько вещей через YouTube и SO, но я искал и экспериментировал с этим в течение трех дней, и здесь я столкнулся с тупиками.

Я пытаюсь определить расстояние между текущим местоположением пользователя и заданной точкой (в данном случае аэропортом). Я могу найти расстояние между двумя жестко запрограммированными местоположениями. Я также могу найти и распечатать текущее местоположение пользователя в консоли. Но когда я пытаюсь объединить те, с которыми я борюсь, чаще всего получаю ошибку

'Значение типа 'CLLocationCoordinate2D' не имеет члена 'расстояние''

Код, который работает, и дает мне расстояние в метрах, которое я хотел бы:

lazy var phx = CLLocation(latitude: 33.409016, longitude: -111.805576)
lazy var distanceFromPhoenixToVegas = las.distance(from: phx)

И это распечатает текущие координаты местоположения:

func printCoordinates(){
     if let location = locationManager.location?.coordinate {
            print (location)
     }
}

Если бы кто-нибудь мог предложить руководство, я был бы признателен.

Примечание: на Stack Overflow есть много похожих вопросов. Есть вопросы о получении текущего местоположения пользователя и вопросы о получении расстояний между двумя точками. Я считаю, что это, по сути, то, о чем я спрашиваю, но на него ответил только оригинальный постер, и ответ кажется мне не совсем правильным. iOS и Swift: отображать расстояние от текущего местоположения?


person Brad C    schedule 11.12.2019    source источник


Ответы (1)


coordinate относится к типу CLLocationCoordinate2D Вам нужен только locationManager.location

if let location = locationManager.location {
   print(phx.distance(from: location))
}
person Sh_Khan    schedule 11.12.2019
comment
У меня было несколько дополнительных ошибок, когда я добавил это. Значение необязательного типа 'CLLocation?' должен быть развернут, чтобы ссылаться на член «расстояние» обернутого базового типа «CLLocation» был первым. lazy var distanceToAirport = currentLocation!.distance(from: phx) Добавление ! решил это. Позже у меня был оператор if, сравнивающий расстояние, и это вызвало ошибку Binary operator '<' cannot be applied to operands of type 'CLLocationDistance?' (aka 'Optional<Double>') and 'Int'. Я переместил переменную currentLocation за пределы функции, и она устранила эту ошибку. Спасибо огромное. - person Brad C; 12.12.2019