如果 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??
.
我想用 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??
.