2017-08-02 81 views
3

不知道这是否是一种奇怪的方式来做到这一点,但在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 
} 

,但我希望我能得到与客体,既UIViewControllerTransitionable的往返。 我想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

回答

1

我不知道这会帮助,但尝试:

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 
} 
+0

我希望我能得到与客体,既'UIViewController'和'Transitionable' – richy

+0

我编辑我的答案,试图为您解决问题 – Sore

相关问题