将 Double 转换为 CLLocationDegrees [SWIFT]

Posted

技术标签:

【中文标题】将 Double 转换为 CLLocationDegrees [SWIFT]【英文标题】:Convert Double to CLLocationDegrees [SWIFT] 【发布时间】:2019-03-06 13:50:33 【问题描述】:

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

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

【问题讨论】:

您在坐标中添加数组而不是单个元素 你的 latitudelongitude 变量被定义为数组,CLLocationCoordinate2D 的构造函数需要 Double 而不是 Doubles 数组 @Anbu.Karthik 是的,但是我将它们放在一个数组中(因为其中有很多纬度和经度)所以你知道我该如何解决这个问题吗? @arturdev 你知道如何使用我的代码修复它吗? 【参考方案1】:

请仔细阅读警告。

latitudelongitude 都是数组,CLLocationCoordinate2D init 方法需要 one latitudeone longitude。 p>

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

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

甚至更短

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

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

【讨论】:

数组总是包含相同数量的项目。我添加了你的代码并删除了我的“location = blabla”,但仍然返回 [0, 0] 嗯 代码应该可以工作。打印语句应该显示类似[__C.CLLocationCoordinate2D(latitude: 1.0, longitude: 4.0), __C.CLLocationCoordinate2D(latitude: 2.0, longitude: 5.0), __C.CLLocationCoordinate2D(latitude: 3.0, longitude: 6.0)] 我使用了代码,但 docent 仍然按预期工作:/ 返回 [0, 0] 啊啊啊啊,我太傻了。我没有调用我的函数大声笑。但我不知道 print [0, 0] 来自哪里。等下我试试看

以上是关于将 Double 转换为 CLLocationDegrees [SWIFT]的主要内容,如果未能解决你的问题,请参考以下文章

无法将参数 '1' 的 'double' 转换为 'double*' 到 'void Swap(double*, double*)'

在QT中如何将double转换为Qstring

为啥此代码显示“无法将 'double' 转换为 'double*'”错误?

在C#中如何将int类型强制转换为double类型

将 char 转换为 double

是否可以将 C# double[,,] 数组转换为 double[] 而无需复制