| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 | 
              - import Foundation
 - class ViewControllerTransitioningProxy: NSObject, UIViewControllerTransitioningDelegate {
 -     weak var delegate: ViewControllerTransitioningDelegate?
 -     
 -     init(target: ViewControllerTransitioningDelegate) {
 -         delegate = target
 -     }
 -     
 -     func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
 -         return delegate?.animationController(forDismissed: dismissed)
 -     }
 -     
 -     func animationController(forPresented presented: UIViewController,
 -                              presenting: UIViewController,
 -                              source: UIViewController)
 -         -> UIViewControllerAnimatedTransitioning? {
 -             return delegate?.animationController(forPresented: presented,
 -                                                  presenting: presenting,
 -                                                  source: source)
 -     }
 - }
 - extension UIViewController {
 -     private struct AssociatedKeys {
 -         static var proxyKey = "ViewControllerTransitioningProxyKey"
 -     }
 -     
 -     private var proxy: ViewControllerTransitioningProxy? {
 -         get { return objc_getAssociatedObject(self, &AssociatedKeys.proxyKey) as? ViewControllerTransitioningProxy }
 -         set { objc_setAssociatedObject(self, &AssociatedKeys.proxyKey, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
 -     }
 -     
 -     func setTransitioningDelegate<T: ViewControllerTransitioningDelegate>(_ target: T) {
 -         proxy = ViewControllerTransitioningProxy(target: target)
 -         transitioningDelegate = proxy
 -     }
 - }
 
 
  |