【发布时间】:2017-08-02 16:39:18
【问题描述】:
不确定这是否是一种奇怪的方法,但在 Swift 3 中,我想检查一个对象是否为 UIViewController 并符合我的协议 Transitionable。我有:
guard let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to),
let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from),
let toTransitionable = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) as? Transitionable,
let fromTransitionable = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) as? Transitionable
else {
transitionContext.completeTransition(!transitionContext.transitionWasCancelled)
return
}
但我希望我能得到和反对既是UIViewController 又是Transitionable 的往返。
我试过let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) as? Transitionable as? UIViewController,但这只是一个UIViewController
我也试过了:
extension Transitionable where Self: UIViewController {
var viewController: UIViewController { return self }
}
但我得到错误:'Transitionable' is not a subtype of 'UIViewController' 当我打电话给toTransitionable.viewController 例如
transitionContext.containerView.addSubview(toTransitionable.viewController.view)
我知道我们可以在 Swift 4 中使用 as? (UIViewController & Transitionable),但这个项目将在 Swift 3 中进行
【问题讨论】:
标签: swift swift3 protocols mixins