如何从不同swift文件的引用中调用UIViewController的函数?

时间:2016-09-07 10:01:23

标签: ios swift uiviewcontroller

我在swift文件中获得了当前的visibleViewController

let currentController = self.navigationController?.visibleViewController

我在与名为UIViewController的实际chargeData相关联的swift文件上有一个函数。

我要做的是从第一个文件中调用该函数,但我无法执行此操作。我试过了:

currentController.chargeData()

但显示错误:

  

类型的价值' UIViewController?'没有会员' chargeData'

我可以从错误日志中猜出,当然它没有识别实际UIViewController所关联的swift文件。

那么我该如何从其引用中访问我的实际UIViewController函数呢?

提前致谢!

4 个答案:

答案 0 :(得分:2)

您必须对currentController变量进行类型转换,以便调用您自己创建的任何方法。

let currentController = self.navigationController?.visibleViewController as? YourViewController //Here YourViewController is the name of the UIViewController subclass you created

希望这会有所帮助。

答案 1 :(得分:1)

你并不遥远:你可以访问视图控制器,但Swift没有意识到它是什么类型 - 它认为它是一个简单的UIViewController?,当你真的知道它不是。

你需要的是一个类型转换。如果您的班级被称为ViewController,您可以写下:

if let currentController = self.navigationController?.visibleViewController as? ViewController {
    currentController.chargeData()
}

答案 2 :(得分:0)

如果您不想将currentControllerUIViewController投射到您的特定类型,那么您可以使用Objective-C' performSelector

let selector = Selector("chargeData")
if currentController?.respondsToSelector(selector) == true {
    currentController!.performSelector(selector)
}

答案 3 :(得分:0)

let currentController = self.navigationController?.visibleViewController

NavigationController的VisibleViewController方法返回UIViewController类型,因此在UIViewController中找不到您的方法。

let currentController = self.navigationController?.visibleViewController as! YourVC.

现在你可以打电话给你的方法了。

在Swift Type中没有隐式查找。