Я изучаю Свифт и, как часть процесса, пытаюсь выяснить, что именно происходит здесь. У меня есть пользовательский segue, где я хочу, чтобы мой диспетчер modal view отклонил переход. Что раньше было в objective-c как:
UIViewController *sourceViewController = self.sourceViewController;
[sourceViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
self
является экземпляром UIStoryboardSegue
.
Я перевел этот фрагмент в Swift как:
self.sourceViewController.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
получить эту ошибку от компилятора:
'UIViewController? не имеет члена, названного 'DismissViewControllerAnimated'
Теперь по документации метод presentingViewController
выглядит следующим образом:
var presentingViewController: UIViewController? { get }
Из того, что я понял в документации по языку Swift, ?
должен развернуть значение, если оно есть. В этом случае контроллер вида. Необъяснимый факт: если я ставил двойной вопросительный знак, он компилируется и работает:
self.sourceViewController.presentingViewController??.dismissViewControllerAnimated(true, completion: nil)
Может ли кто-нибудь сказать мне, что мне не хватает? Что это должно сделать?