不知道这是否是一种奇怪的方式来做到这一点,但在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)
我明白,我们可以做斯威夫特4 as? (UIViewController & Transitionable)
但这个项目将是在斯威夫特3
我希望我能得到与客体,既'UIViewController'和'Transitionable' – richy
我编辑我的答案,试图为您解决问题 – Sore