Swift:将类方法作为函数参数传递(而不是通用函数)

时间:2018-01-05 03:18:11

标签: swift uiviewcontroller function-parameter

我试图从弹出视图控制器调用根视图控制器上的函数。以下功能有效,但似乎应该有更好的方法:

func doSomethingInRoot() {
    if let appDelegate = UIApplication.shared.delegate as? AppDelegate,
        let currentRoot = appDelegate.window!.rootViewController as? RootViewController {
            currentRoot.somefunction()
    }
}

在上面的代码中,doSomethingInRoot将包含在popover中,someFunction将是RootViewController的函数。

我正在寻找的是将someFunction传递给包含上述if let的其他功能的方法,但问题是currentRoot仅被指定为{上面的{1}}(即,RootViewController并不知道它传递了doSomethingInRoot的方法而不是通用函数。

在写这个问题时,我意识到我可以做以下事情,感觉非常干净,但我仍然很好奇我是否可以将方法作为参数传递给特定的类。

RootViewController

1 个答案:

答案 0 :(得分:0)

在弹出窗口视图控制器中,您可以添加这样的属性来保存对someFunction的引用

var rootsSomeFunction: (()->Void)!

然后在创建popover VC时分配引用,无论它是在prepareForSegue中,还是在从storyboard等实例化之后。我还将getRoot()移到App Delegate。

popoverVC.rootsSomeFunction = appDelegate.getRoot().someFunction().self

最后,在你的popover视图控制器中,你可以通过属性调用它:

self.rootsSomeFunction()