2017-08-02 80 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

相關問題