将Double转换为CLLocationDegrees [SWIFT]

时间:2019-03-06 13:50:33

标签: ios swift core-location cllocationmanager cllocationcoordinate2d

我正在尝试将两个数组转换为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]

有人知道如何解决此问题吗?请告诉我。 如果您不喜欢这里,请至少在评论中写下原因。

1 个答案:

答案 0 :(得分:2)

请仔细阅读警告。

longitudeCLLocationCoordinate2D都是数组,并且init latitude方法期望一个 longitude一个 zip

您可以使用mapassert(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)

或更短

Object doesn't support this property or method (Error 438)

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