ios - 如果 let 不解包 MKAnnotation 的 title 属性的可选值

标签 ios swift mkannotation

我想用 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,所以需要optional绑定(bind)两次。

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

尽管根据documentation of MKAnnotation.title ,标题的类型应该是 String?,因为 title 被声明为一个非必需的协议(protocol)属性:

optional var title: String? { get }

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

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

相关文章:

ios - Insert multiple NSDictionary to Core Data问题

javascript - PhoneGap Ajax 请求在使用 AT&T 数据时返回 502(错误的网关),但不使用 WiFi

ios - 接收我们在用户登录时存储的用户默认值(swift3 ...)

Swift - 'internal' 修饰符不能在协议(protocol)中使用

ios - map 注释显示所有点的所有相同图像/图钉

ios - UISegmentController 与 UITableviewController

ios - 当 CAKeyframeAnimation 完成动画时有没有办法调用方法?

swift - 快速将 TableView 添加到 .xib View 中

ios - 在 MKMapView 中围绕当前位置添加随机 MKAnnotations