【问题标题】:Not able to convert from Array data to CLLocationCoordinate2D in swift to draw a Polyline in mapview无法快速从数组数据转换为 CLLocationCoordinate2D 以在地图视图中绘制折线
【发布时间】:2018-03-15 08:07:46
【问题描述】:

我有一个数据数组 (coordinatesArray),其中包含以下双值。

(
    "-61.4149691",
    "42.9572076"
)
(
    "-61.4126004",
    "42.9572026"
)
(
    "-61.476674304",
    "42.9572032"
)

这是地图数据

 (
        "-61.4149691",
        "42.9572076"
 )

所以,我采取了一个循环,通过转换为双精度将每个索引数据转换为纬度和经度。

 if let coordinatesArray = geoMetrys.value(forKey: "coordinates") as? NSArray {
    for mapData in coordinatesArray {
     print(mapData)

  let latitude = (mapData[0] as NSString).doubleValue
  let longitude = (mapData[1] as NSString).doubleValue

  var coordinatesToAppend: CLLocationCoordinate2D? = [latitude, longitude]

  var polyline = MKPolyline(coordinates: &coordinatesToAppend!, count: coordinatesArray.count)
 mapView.add(polyline)

但是,它在编译时显示错误。

`Type 'Any' has no subscript members` for following lines
  let latitude = (mapData[0] as NSString).doubleValue
  let longitude = (mapData[1] as NSString).doubleValue

我有一个数组,其中包含纬度和经度值的数据。 所以,我想用这些值在 mapview 中绘制一条折线。

谁能建议我在哪里未能实现这一目标?

【问题讨论】:

    标签: arrays iphone swift mkpolyline cllocationcoordinate2d


    【解决方案1】:

    在您的代码中,行

    if let coordinatesArray = geoMetrys.value(forKey: "coordinates") as? NSArray
    

    返回Any 类型的数组(即[Any])。之后,当你使用 for 循环时

    for mapData in coordinatesArray
    

    您实际上是在循环Any 的数组,其中,在每次迭代中,一个项目(Any 类型)被分配给mapData。现在如果这个mapData 本身就是一个数组,你必须明确指定它为

    if let dataArray = mapData as? NSArray {
        let latitude = (dataArray[0] as NSString).doubleValue
        let longitude = (dataArray[1] as NSString).doubleValue
    }
    

    【讨论】:

    • 是的,但是它显示的上下文类型'CLLocationCoordinate2D'不能与var coordinatesToAppend的数组文字一起使用:CLLocationCoordinate2D? = [纬度,经度]
    • 那是你下一行的错误。此解决方案解决了您的第一个问题。您的第二个问题是您将值分配给latitudelongitude 的方式。 CLLocationCoordinate2D 不接受数组。相反,您将不得不做类似let coordinatesToAppend = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    • 运行时出现以下错误无法将类型“__NSCFNumber”(0x109a7b208)的值转换为“NSString”(0x108bec0d0)。在这一行中 let latitude = (dataArray[0] as!NSString).doubleValue
    • 看来dataArray[0]毕竟不是NSString。相反,它似乎是NSNumber。尝试为dataArray[0]dataArray[1] 更改它。或者直接改成"\(dataArray[0])".doubleValue
    猜你喜欢
    • 1970-01-01
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多