我有一个模式,我创建实现某个协议的UIViewControllers。因为我需要它们是真正的UIViewControllers才能将它们推送到堆栈上,所以它们总是需要UIViewControllers而不是实现协议的随机类。
起初我以为我可以限制协议,但我无法理解。如果你知道如何在源头解决它,那就更好了。然而作为回归类型,我似乎更幸运:
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和某个协议总是被实现吗?
答案 0 :(得分:1)
在上次更改后,此类型别名如下所示:
typealias V = UIViewController & ModalPresentationCompletion
在Swift 4中测试