我在我的应用中使用谷歌地图iOS SDK,一切都很好,直到今天。我已经下载了Xcode 6.3并且遇到了一些错误。排除了所有这些,除了我的MapViewController类中的两个错误,弹出这两个方法:
第一种方法:
func mapView(mapView: GMSMapView!, didTapMarker marker: ExtendedMarker!) -> Bool {
... some code ...
}
有错误:
Objective-C方法'mapView:didTapMarker:'由方法'mapView(:didTapMarker :)提供'与协议'GMSMapViewDelegate'中的可选需求方法'mapView(:didTapMarker :)'冲突/ p>
第二种方法:
func mapView(mapView: GMSMapView!, markerInfoContents marker: ExtendedMarker!) -> UIView! {
... some code ...
}
有错误:
Objective-C方法'mapView:markerInfoContents:'由方法提供'mapView(:markerInfoContents :)'与协议'GMSMapViewDelegate'中的可选需求方法'mapView(:markerInfoContents :)'冲突/ p>
我尝试重写这些方法,但没有用。我还检查了Google Maps SDK的更新,但上次更新时间是2015年2月。
我会感谢任何建议,谢谢你提前! :)
答案 0 :(得分:3)
我说你的问题是第二个参数的ExtendedMarker
类型。通过采用该协议,您的类承诺,如果它实现了可选方法mapView:didTapMarker:
,则第二个参数可以是GMSMarker
或其任何子类。
您的方法不满足接口契约,因为它只接受ExtendedMarker
的实例 - 我假设它是GMSMarker
的子类。
我会定义类似这样的方法。您需要准备好处理传入的非ExtendedMarker实例,因为合同说您可能会获得它们。只是试图强迫演员阵容可能会导致异常。
func mapView(mapView: GMSMapView!, didTapMarker marker: GMSMarker!) -> Bool
{
// Non specific ExtendedMarker processing
if let marker = marker as? ExtendedMarker
{
// ExtendedMarker specific processing
}
// More non specific ExtendedMarker processing
}
答案 1 :(得分:1)
不幸的是,我手头没有谷歌iOS SDK,但错误是因为标记为强制解包的参数?也许不再需要force-unwrap了(在迁移到Swift 1.2时,我遇到了与另一种方法类似的问题,所以只是猜测)
答案 2 :(得分:1)
我和'didTapInfoWindowOfMarker'有同样的问题。 如果您尝试以下代码,它也可能对您有用:
func mapView(mapView: GMSMapView!, didTapMarker marker: GMSMarker!) -> Bool {
let placeMarker = marker as! ExtendedMarker
... some code ...
}
你也可以和另一个人一样。 我希望它对你有用!