我升级到更新的Swift编译器并遇到了这个编译错误我无法弄清楚如何解决。我有一堆从MKMapViewDelegate声明的mapView函数。它们似乎都匹配,除了抛出这个错误的那个:
ViewController.swift:137:10:Objective-C方法' mapView:viewForAnnotation:'方法' mapView(:viewForAnnotation :)'与可选的需求方法冲突' mapView(:viewForAnnotation:)'在协议'MKMapViewDelegate'
中ViewController.swift:12:7:Class' ViewController'声明符合协议' MKMapViewDelegate'here
/ViewController.swift:137:10:要求' mapView(_:viewForAnnotation :)'在这里声明(MapKit.MKMapViewDelegate)
我查看了MKMapViewDelegate方法,我认为我正确匹配它,所以我感到困惑的是需要纠正的改变。从那里我看到
可选的func mapView(mapView:MKMapView!,viewForAnnotation批注:MKAnnotation!) - > MKAnnotationView!
以下是我的声明,引发错误。
class ViewController: UIViewController, MKMapViewDelegate {
func mapView(aMapView: MKMapView!, viewForAnnotation annotation: CustomMapPinAnnotation!) -> MKAnnotationView! {
//The error is thrown here on the m in mapView
}
}
答案 0 :(得分:2)
我查看了MKMapViewDelegate方法,我认为我正确匹配它,所以我感到困惑的是需要纠正的改变。从那里我看到
optional func mapView(mapView: MKMapView!,
viewForAnnotation annotation: MKAnnotation!)
-> MKAnnotationView!
真的?你认为你的声明与那个相符吗?仔细看看。你有:
func mapView(aMapView: MKMapView!,
viewForAnnotation annotation: CustomMapPinAnnotation!)
-> MKAnnotationView! {
像这样改写:
func mapView(aMapView: MKMapView!,
viewForAnnotation annotation: MKAnnotation!)
-> MKAnnotationView! {
你看到了区别吗?您不能在委托方法声明中更改类型。声明有MKAnnotation,你必须声明MKAnnotation。这个MKAnnotation可能也可能不是CustomMapPinAnnotation,但这是为你的代码在函数体中决定的。