2017-08-02 9 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 } 
} 

しかし、私はエラーを取得:私は、例えばtoTransitionable.viewControllerを呼び出すとき'Transitionable' is not a subtype of 'UIViewController'

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") 
    } 
} 

か両方の1つの変数だけを使用したい場合

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

関連する問題