父视图控制器扩展

时间:2018-08-28 19:38:14

标签: ios objective-c swift

我正在尝试实现一种共享方法,该方法将允许在父视图控制器和子视图控制器之间共享数据。在Objective-C中,我可以这样:

@implementation UIViewController(MyParentViewController)

- (MyParentViewController*)containerController
{
    UIViewController *parent = self;
    Class parentClass = [MyParentViewController class];
    while ( nil != (parent = [parent parentViewController]) && ![parent isKindOfClass:parentClass] ) {}
    return (id)parent;
}

@end

这允许子视图控制器仅通过添加MyParentViewController *containerController = self.containerController;来创建其父视图控制器的实例 所以问题是如何在Swift 4中实现类似的功能?预先感谢!

1 个答案:

答案 0 :(得分:0)

这是您想要实现的基本实现。无论如何,这不是共享。如果存在父子包含关系,则该方法允许控制器获取特定控制器的实例。

extension UIViewController {
    var containerController: MyParentViewController? {
        var parentController: UIViewController? = parent
        while parentController as? MyParentViewController == nil {
            parentController = parentController?.parent
        }
        if let controller = parentController as? MyParentViewController {
            return controller
        }
        return nil
    }
}