У меня есть шаблон, где я создаю UIViewControllers, которые реализуют определенный протокол. Поскольку мне нужно, чтобы они были настоящими UIViewControllers, чтобы иметь возможность нажимать их на стек, они всегда должны быть UIViewControllers, а не случайным классом, реализующим протокол.UIViewController, реализующий протокол как параметр или возвращаемый тип
Сначала я думал, что могу ограничить протокол, но я не мог понять это. Если у вас есть идея, как решить проблему в источнике, это будет даже лучше. Тем не менее, как возвращение типа это казалось мне повезло больше:
https://briancoyner.github.io/2015/11/14/swift-protocol-that-returns-protocol.html
protocol ModalViewControllerProvider {
typealias V: UIViewController, ModalPresentationCompletion
func viewControllerWithObject(object: AnyObject) -> V
}
Этот пример не работает в Swift 3 однако, и я не мог заставить его работать, кроме как с составом протокола, который не работает для UIViewController.
Я могу обойти это, вернув UIViewController, затем перейдя на ModalPresentationCompletion, но это немного странно для других программистов.
Могу ли я заверить либо в объявлении самого протокола, либо путем создания чего-то вроде типалиасов, подобных описанному выше, чтобы гарантировать, что он всегда реализует UIViewController и определенный протокол?
Это новое в Swift-справа? Или это также синтаксис Swift 3? –
Теперь я не могу проверить Swift 3. Возможно, он работает на обоих диалектах, но я не могу этого гарантировать. – Alexey
Ну, в любом случае, я больше не был заинтересован в ответе Swift 3! Так что спасибо! –