if let не разворачивает необязательное значение для свойства title MKAnnotation - PullRequest
0 голосов
/ 02 октября 2018

Я хочу развернуть необязательное значение с помощью оператора if-let.Мне нужно получить заголовок MKAnnotation.

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

Почему if-let здесь не работает?

1 Ответ

0 голосов
/ 02 октября 2018

Тип 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??.

...