You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Google Maps SDK中在函数外部使用标记的title变量

如何在Google Maps Marker外部获取并使用title变量?

我来给你几个实用的方案,解决这个问题:

方案1:利用GMSMarker的userData属性(最推荐)

GMSMarker本身就自带userData属性,专门用来存储自定义数据,完全适配你的场景!你可以直接把整个Talleres对象或者单独的title存进去,之后不管在哪个函数里拿到这个marker,都能轻松取出数据。

修改你的jsonMapTaller()代码:

for state in self.marcadores {
    let coordinates = CLLocationCoordinate2D(latitude: lat, longitude: long)
    let marker = GMSMarker(position: coordinates)
    marker.map = self.map
    marker.icon = UIImage(...)
    // 把整个Talleres对象存进去,后续能获取更多关联信息
    marker.userData = state
    // 也可以只存title:marker.userData = state.title
}

之后在其他函数(比如marker点击事件)里,就能这样获取title:

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    if let taller = marker.userData as? Talleres, let title = taller.title {
        // 这里就可以使用title了,比如打印、跳转页面等
        print("点击的标记标题:\(title)")
    }
    return false
}

方案2:用自定义数组存储关联数据

如果需要在函数外部直接遍历所有标记的title,你可以在类里单独声明一个数组,和marker的创建顺序保持一致,把每个state.title存进去:

首先在类中添加数组变量:

var markerTitles: [String?] = []

然后在jsonMapTaller()里补充:

for state in self.marcadores {
    // ... 其他创建marker的代码 ...
    marker.accessibilityLabel = state.title
    // 将title加入数组
    markerTitles.append(state.title)
}

之后在其他函数里,就能直接访问这个数组:

// 遍历所有存储的title
for title in markerTitles {
    if let title = title {
        print(title)
    }
}

方案3:自定义Marker子类

如果你的业务需求更复杂,还可以创建GMSMarker的子类,直接添加专属的title属性:

class CustomMarker: GMSMarker {
    var tallerTitle: String?
}

然后在创建marker时使用这个子类:

for state in self.marcadores {
    let coordinates = CLLocationCoordinate2D(latitude: lat, longitude: long)
    let marker = CustomMarker(position: coordinates)
    marker.map = self.map
    marker.icon = UIImage(...)
    marker.tallerTitle = state.title
}

之后在其他函数里,只要把marker转成CustomMarker类型,就能拿到title:

func mapView(_ mapView: GMSMapView, didTap marker: GMSMarker) -> Bool {
    if let customMarker = marker as? CustomMarker, let title = customMarker.tallerTitle {
        print("标记标题:\(title)")
    }
    return false
}

这几个方案里,方案1是最简洁且符合Google Maps SDK设计思路的,优先推荐使用哦!

内容的提问来源于stack exchange,提问作者AlbertB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:46:53