更新到XCode 6.3(Swift 1.2)后,“Objective-C方法与可选的需求方法冲突”错误

时间:2015-04-13 17:23:48

标签: ios objective-c xcode swift

我在我的应用中使用谷歌地图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月。

我会感谢任何建议,谢谢你提前! :)

3 个答案:

答案 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 ...
}

你也可以和另一个人一样。 我希望它对你有用!