繁体   English   中英

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

[英]“Objective-C method conflicts with optional requirement method”error after update to XCode 6.3 (Swift 1.2)

我在我的应用程序中使用谷歌地图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 :)' 冲突

第二种方法:

func mapView(mapView: GMSMapView!, markerInfoContents marker: ExtendedMarker!) -> UIView! {
    ... some code ...
}

有错误:

Objective-C方法'mapView:markerInfoContents:'由方法'mapView( :markerInfoContents :)'提供 '与协议'GMSMapViewDelegate'中的可选需求方法'mapView( :markerInfoContents :)' 冲突

我尝试重写这些方法,但它没有帮助。 我还检查了Google Maps SDK的更新,但最后更新时间是2015年2月。

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

我会说你的问题是第二个参数的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
}

不幸的是,我手头没有谷歌iOS SDK,但错误是因为标记为强制解包的参数? 也许不再需要force-unwrap了(在迁移到Swift 1.2时我遇到了与另一种方法类似的问题,所以只是猜测)

我和'didTapInfoWindowOfMarker'有同样的问题。 如果您尝试以下代码,它也可能适用于您:

func mapView(mapView: GMSMapView!, didTapMarker marker: GMSMarker!) -> Bool {
     let placeMarker = marker as! ExtendedMarker
    ... some code ...
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM