【swift】高德地图 Annotation 的小坑

我们都知道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:annotation
reuseIdentifier: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也变得没有意义了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值