' MKPinAnnotationView'不可转换为'()'

时间:2014-10-22 21:20:02

标签: swift compiler-errors return-value

我正在尝试将一些Objective-C代码翻译/转换为Swift。
这是Objective-C原文:

#pragma mark - MKMapViewDelegate

- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
    MKPinAnnotationView *annotationView = nil;
    if ([annotation isKindOfClass:[PlaceAnnotation class]])
    {
        annotationView = (MKPinAnnotationView *)[self.mapView dequeueReusableAnnotationViewWithIdentifier:@"Pin"];
        if (annotationView == nil)
        {
            annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"Pin"];
            annotationView.canShowCallout = YES;
            annotationView.animatesDrop = YES;
        }
    }
    return annotationView;
}

这是斯威夫特:

func mapView(mapView:MKMapView, annotation:MKAnnotation) {

    var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("Pin") as? MKPinAnnotationView

    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "Pin")
        annotationView!.canShowCallout = true
        annotationView!.animatesDrop = true
    }

    return annotationView
}

这是错误: enter image description here

我不完全理解编译器试图对我说的话。
'annotationView'class是函数返回类型的子类:MKAnnotationView。

2 个答案:

答案 0 :(得分:1)

您的func签名缺少返回类型:

func mapView(mapView:MKMapView, annotation:MKAnnotation) -> MKPinAnnotationView {

没有显式返回类型,swift默认为空元组,这意味着没有返回类型 - 这就是错误消息所说的,也许不是以明确的方式:)

答案 1 :(得分:1)

这里有完成的功能编译好了:

func mapView(mapView:MKMapView, annotation:MKAnnotation) -> MKPinAnnotationView {

    var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier("Pin") as? MKPinAnnotationView

    if annotationView == nil {
        annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "Pin")
        annotationView!.canShowCallout = true
        annotationView!.animatesDrop = true
    }

    return annotationView!
}