Не удалось преобразовать CLLocationCoordinate2D в (CLLocationCoordinate2D) - PullRequest
0 голосов
/ 23 декабря 2018

У меня проблема с моим кодом.Я получаю это сообщение об ошибке:

Невозможно преобразовать значение типа 'CLLocationCoordinate2D' в ожидаемый тип аргумента '(CLLocationCoordinate2D) throws -> Bool'

if(locationManager.allowsBackgroundLocationUpdates && isDriving){
        locationManager.startUpdatingLocation()
        guard let locValue: CLLocationCoordinate2D = locationManager.location?.coordinate else { return }
        Map.setCenter(locValue, animated: true)
        Map.setRegion(MKCoordinateRegion(center: locValue, latitudinalMeters: 75, longitudinalMeters: 75), animated: true)

        if !locations.contains(where: locValue) { //<- ERROR
            locations.append(locValue);
            NSLog("%f %f -> Gesamt: %d", locValue.latitude, locValue.longitude, locations.count);
            let polyline = MKPolyline(coordinates: &locations, count: locations.count);
            Map.addOverlay(polyline);
        }
    }

местоположений:

var locations = [CLLocationCoordinate2D]()

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

CLLocationCoordinate2D не соответствует Equatable.

Вы должны сравнить latitude и longitude в закрытии where

if !locations.contains(where: {$0.latitude == locValue.latitude && $0.longitude == locValue.longitude}) { ...
0 голосов
/ 23 декабря 2018

Использовать

extension CLLocationCoordinate2D : Equatable { 
    static public func ==(left: CLLocationCoordinate2D, right: CLLocationCoordinate2D) -> Bool {
        return left.latitude == right.latitude && left.longitude == right.longitude
    } 
}

if !locations.contains(locValue){  

}

Для использования массива contains элементы должны соответствовать Equatable, а поскольку CLLocationCoordinate2D не соответствует, то для исправления ошибки вам нужнодобавить предложение where, чтобы указать, как будет выглядеть сравнение

...