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