无法在swift中从Array数据转换为CLLocationCoordinate2D以在mapview中绘制折线

时间:2018-03-15 08:07:47

标签: arrays iphone swift mkpolyline cllocationcoordinate2d

我有数组(coordinatesArray)数据,其中包含双重值,如下所示。

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

这是mapData

 (
        "-61.4149691",
        "42.9572076"
 )

因此,我采用循环将每个索引数据转换为纬度和经度,转换为double。

 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中使用这些值绘制折线。

有人能建议我在哪里做不到这个吗?

1 个答案:

答案 0 :(得分:0)

在您的代码中,行

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
}