我在swift文件中获得了当前的visibleViewController
:
let currentController = self.navigationController?.visibleViewController
我在与名为UIViewController
的实际chargeData
相关联的swift文件上有一个函数。
我要做的是从第一个文件中调用该函数,但我无法执行此操作。我试过了:
currentController.chargeData()
但显示错误:
类型的价值' UIViewController?'没有会员' chargeData'
我可以从错误日志中猜出,当然它没有识别实际UIViewController
所关联的swift文件。
那么我该如何从其引用中访问我的实际UIViewController
函数呢?
提前致谢!
答案 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)
如果您不想将currentController
从UIViewController
投射到您的特定类型,那么您可以使用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中没有隐式查找。