【swift】高德地图 Annotation 的小坑

来源:互联网 发布:人力资源管理系统java 编辑:程序博客网 时间:2024/05/07 08:33

我们都知道swift对?和!的要求十分严格,那这也导致了和Objective-C的一些不同,例如高德地图API中是这样定义的

- (MAAnnotationView *)mapView:(MAMapView *)mapView viewForAnnotation:(id<MAAnnotation>)annotation{    if ([annotation isKindOfClass:[MAPointAnnotation class]])    {        static NSString *reuseIndetifier = @"annotationReuseIndetifier";        MAAnnotationView *annotationView = (MAAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:reuseIndetifier];        if (annotationView == nil)        {            annotationView = [[MAAnnotationView alloc] initWithAnnotation:annotationreuseIdentifier:reuseIndetifier];        }        annotationView.image = [UIImage imageNamed:@"restaurant"];        //设置中心点偏移,使得标注底部中间点成为经纬度对应点        annotationView.centerOffset = CGPointMake(0, -18);        return annotationView;    }    return nil;}

我们在swift里面写的时候,如果不是直接复制高德地图API中的代码的话,容易出现这个问题
那就是每次初始化的时候总是报nil的错误,具体错误出在哪里呢?

var annotationView: MAAnnotationView**?** = mapView.dequeueReusableAnnotationView(withIdentifier: pointReuseIndetifier) if annotationView == nil {       annotationView = MAAnnotationView(annotation: annotation, reuseIdentifier: pointReuseIndetifier)   }

var annotationView: MAAnnotationView?中的?非常关键,如果没有的话,那就意味着这些都一定是非空的,下面的判断为nil也变得没有意义了。

这都是细节,但是需要仔细甄别。