UIViewController实现协议作为参数或返回类型

时间:2016-12-12 14:18:46

标签: swift3 swift-protocols

我有一个模式,我创建实现某个协议的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和某个协议总是被实现吗?

1 个答案:

答案 0 :(得分:1)

在上次更改后,此类型别名如下所示:

typealias V = UIViewController & ModalPresentationCompletion

在Swift 4中测试