如果 let 不展开 MKAnnotation 标题的可选值 属性

if let doesn't unwrap optional value for MKAnnotation's title property

我想用 if-let 语句解包可选值。 我需要获取 MKAnnotation 的标题。

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

为什么 if-let 在这里不起作用?

MKAnnotation.title的类型是String??,是一个嵌套的Optional,所以需要选择性绑定两次。

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

即使根据 documentation of MKAnnotation.title,标题类型应该是 String?,因为 title 被声明为 non-required 协议 属性:

optional var title: String? { get }

当通过 MKAnnotation 协议类型而不是实现该协议的具体类型访问时,它被包装在另一个 Optional 中,这表示 title 属性 甚至可能不会由实现协议的具体类型实现。因此,当访问 MKAnnotation object 的 title 属性 而不是具有符合 MKAnnotation 的具体类型的 object 时, title 将是 String??.