检查一个对象是否是一个特定的类,并符合协议
问题描述:
不知道这是否是一种奇怪的方式来做到这一点,但在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
答
我不知道这会帮助,但尝试:
if let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) as? UIViewController{
if let _ = toViewController as? Transitionable{
print("conforms to protocol")
}
}
if let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) as? UIViewController{
if let _ = fromViewController as? Transitionable{
print("conforms to protocol")
}
}
或者,如果你只想要它在一个变量是
你可以创建一个新的类来扩展UIViewController并实现协议Transitionable。
喜欢的东西:
class YourNewViewControllerClass : UIViewController,Transitionable{
//implements your Transitionable methods
}
后:
if let viewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) as? YourNewViewControllerClass{
//success
}
我希望我能得到与客体,既'UIViewController'和'Transitionable' – richy
我编辑我的答案,试图为您解决问题 – Sore