Swift mapView 声明的编译器错误

Swift compiler error on mapView declaration

我升级到较新的 Swift 编译器并 运行 遇到此编译器错误我不知道如何解决。我有一堆从 MKMapViewDelegate 声明的 mapView 函数。除了抛出此错误的这个之外,它们似乎都匹配:

ViewController.swift:137:10: Objective-C 方法 'mapView:viewForAnnotation:' 方法 'mapView(:viewForAnnotation:)' 与协议 'MKMapViewDelegate' 中的可选要求方法 'mapView(:viewForAnnotation:)' 冲突

ViewController.swift:12:7: Class 'ViewController' 在此处声明符合协议“MKMapViewDelegate”

/ViewController.swift:137:10:此处声明的要求 'mapView(_:viewForAnnotation:)' (MapKit.MKMapViewDelegate)

我查看了 MKMapViewDelegate 方法,我认为我正确地匹配了它,所以我对需要更正的更改感到困惑。从那里我看到

optional func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView!

下面是我的声明,它引发了错误。

    class ViewController: UIViewController, MKMapViewDelegate {

        func mapView(aMapView: MKMapView!, viewForAnnotation annotation: CustomMapPinAnnotation!) -> MKAnnotationView! {
         //The error is thrown here on the m in mapView
        }
    }

I looked at MKMapViewDelegate method and I thought I was matching it up correctly so I am baffled as to what has changed that needs correction. From there I see

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,但这由您的代码在函数的主体内决定。