Конвертировать Double в CLLocationDegrees [SWIFT] - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь преобразовать два массива в CLLocationDegrees и оттуда объединить их в один массив (CLLocationCoordinate2D).

Итак, начнем с самого начала:

У меня есть два массива типа Double, которые я получил от Firestore. (Один с широтами, а другой с долготами). Я пытаюсь преобразовать эти массивы в CLLocationDegrees и затем объединить их в один массив, который должен иметь тип CLLocationCoordiante2D.

В верхней части кода (в классе) у меня есть это:

var latitude:[Double] = []
var longitude:[Double] = []

var locations: [CLLocationCoordinate2D] = [] 

И после viewDidLoad я создал функцию, которая выглядит следующим образом:

func insertInMap()
{
    if (CLLocationManager.locationServicesEnabled())
    {
        //WARNING BELOW
        locations = [CLLocationCoordinate2D(latitude: latitude as! CLLocationDegrees, longitude: longitude as! CLLocationDegrees)] 
        print(locations) 

        //Insert the coordinates (In the correct order) into mapView.            
        //Draw a polyline between the coordinates
    } else{
        //Code here
    }
}

Предупреждение, которое я получаю:

Приведение из «[Double]» к несвязанному типу «CLLocationDegrees» (иначе «Double») всегда завершается неудачей

Если я печатаю «местоположения», он возвращает:

[0, 0]

Кто-нибудь знает, как решить эту проблему? Пожалуйста, дайте мне знать. И если вам здесь не нравится, по крайней мере, напишите причину этого в комментариях.

1 Ответ

1 голос
/ 06 марта 2019

Пожалуйста, внимательно прочитайте предупреждение.

И latitude, и longitude являются массивами, а метод CLLocationCoordinate2D init ожидает one latitude и one longitude.

Вы можете использовать zip и map для создания массива координат

assert(latitude.count == longitude.count, "Both arrays must contain the same number of items")
locations = zip(latitude, longitude).map{CLLocationCoordinate2D(latitude: $0.0, longitude: $0.1)}

или даже короче

locations = zip(latitude, longitude).map(CLLocationCoordinate2D.init)

Строка подтверждения вызывает фатальную ошибку, еслиусловие не выполнено.

...