我想用 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/