我正在尝试将一些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
}
这是错误:
我不完全理解编译器试图对我说的话。
'annotationView'class是函数返回类型的子类:MKAnnotationView。
答案 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!
}