mapView声明

时间:2015-05-06 14:26:46

标签: ios swift mkmapview mkannotationview mkmapviewdelegate

我升级到更新的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
        }
    }

1 个答案:

答案 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,但这是为你的代码在函数体中决定的。