将Double转换为CLLocationDegrees [SWIFT]

问题描述 投票:0回答:1

我正在尝试将两个数组转换为CLLocationDegrees,并从那里将它们合并为一个数组(CLLocationCoordinate2D)。

所以让我们从头开始:

我有两个从Firestore收到的Double类型的数组。 (一个有纬度,一个有经度)。我正在尝试将这些数组转换为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]

有谁知道如何解决这个问题?请告诉我。如果你在这里不喜欢,至少在评论中写下它的原因。

ios swift core-location cllocationmanager cllocationcoordinate2d
1个回答
1
投票

请仔细阅读警告。

latitudelongitude都是阵列,而CLLocationCoordinate2D init方法需要一个latitude和一个longitude

您可以使用zipmap来创建坐标数组

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)

如果条件失败,断言行会导致致命错误。

© www.soinside.com 2019 - 2024. All rights reserved.