我想解开与IF-让语句可选值。 我需要得到MKAnnotation的称号。
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if let title = view.annotation?.title {
print(title) //Optional("Moscow")
}
}
为什么如果-LET不在这里工作了?
我想解开与IF-让语句可选值。 我需要得到MKAnnotation的称号。
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if let title = view.annotation?.title {
print(title) //Optional("Moscow")
}
}
为什么如果-LET不在这里工作了?
的类型的MKAnnotation.title
是String??
,这是一个嵌套Optional
,所以你需要选购绑定两次。
func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
if let optionalTitle = view.annotation?.title, let title = optionalTitle {
print(title)
}
}
尽管根据MKAnnotation.title的文件 ,标题的类型应该是String?
中,由于title
被声明作为非必需的协议属性:
optional var title: String? { get }
通过访问时MKAnnotation
协议类型,而不是具体类型实现的协议,它成为包裹在另一Optional
,它代表一个事实,即title
属性甚至可能不被通过实施该协议的具体类型实现。 因此,在访问时title
的财产MKAnnotation
一个具体类型符合对象,而不是一个对象MKAnnotation
的类型, title
将String??
。