如何从GMSMarker获取索引?

时间:2017-04-26 05:03:36

标签: swift google-maps

如何检测地图上按下了哪个标记。我在地图上有很少的标记,从API下载的标记数组中有Marker类,它包含一些数据。

例如我有这样的数据

[States(name: "text1", long: 110.42400399999997,lat: -7.0343237999999992), 
States(name: "text2", long: 110.42769829999997, lat: -7.0856947999999997), 
States(name: "text3", long: 110.42922440000007, lat: -7.3250846999999997), 
States(name: "text4", long: 117.11625830000003, lat: -0.50436380000000003), 
States(name: "text5", long: 110.43093620000002, lat: -7.0730081999999994)]

如果我点按包含数据1(States(name: "text1", long: 110.42400399999997,lat: -7.0343237999999992)

的标记

如何获得索引0.如果我点击包含数据2的标记,我如何获得索引1?

1 个答案:

答案 0 :(得分:4)

所以我想你通过迭代遍历数组来添加标记:

for state in states { // assuming states is the array you showed in the question
    let marker = GMSMarker(position: CLLocationCoordinate2D(latitude: state.lat, longitude: state.long))
    // configure the marker...
    marker.map = mapView
}

我们的想法是,在创建数组之后,您也可以将标记添加到数组中。由于您按数据的顺序创建了标记,因此包含标记的数组中的每个项都对应于同一索引处的数据。

让我们在班级声明标记数组:

var markers = [GMSMarker]()

然后在上面的for循环中,将标记添加到markers

markers.append(marker)

现在您可以找到仅通过以下方式点击的数据:

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    if let index = markers.index(of: marker) {
        let tappedState = states[index]
    }
}