我想用if-let语句展开可选值。
我需要得到MKAnnotation的标题。

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

如果我们不在这里工作怎么办?

最佳答案

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被声明为非必需的协议属性:
optional var title: String? { get }

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

关于ios - 如果let不解开MKAnnotation的title属性的可选值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52605162/

10-12 04:28