要是让不适合MKAnnotation的title属性解开可选值(if let doesn't

2019-10-30 08:59发布

我想解开与IF-让语句可选值。 我需要得到MKAnnotation的称号。

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if let title = view.annotation?.title {
        print(title) //Optional("Moscow")
    }
}

为什么如果-LET不在这里工作了?

Answer 1:

的类型的MKAnnotation.titleString?? ,这是一个嵌套Optional ,所以你需要选购绑定两次。

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if let optionalTitle = view.annotation?.title, let title = optionalTitle {
        print(title)
    }
}

尽管根据MKAnnotation.title的文件 ,标题的类型应该是String? 中,由于title被声明作为非必需的协议属性:

optional var title: String? { get }

通过访问时MKAnnotation协议类型,而不是具体类型实现的协议,它成为包裹在另一Optional ,它代表一个事实,即title属性甚至可能不被通过实施该协议的具体类型实现。 因此,在访问时title的财产MKAnnotation一个具体类型符合对象,而不是一个对象MKAnnotation的类型, titleString??



文章来源: if let doesn't unwrap optional value for MKAnnotation's title property