我试图调用存储在另一个类上的函数:
的ViewController
@IBAction func refreshComments() {
CommentsTableViewController().refresh()
}
CommentsTableViewController
var variable2 = "0"
func refresh(){
print(variable2)
}
这很好用,但在我的情况下,我的变量的值不是静态值,我已经动态地接收了这个值,我知道问题在于这一行:
//CommentsTableViewController().refresh()
因为CommentsTableViewController()
- 这是类构造函数,每次调用CommentsTableViewController()
时,它都会返回CommentsTableViewController
类的新实例/对象,当然默认值为。
所以我真的陷入了困境,我不知道如何解决这个问题。我已经尝试将func refresh()
转换为funcrefresh()
类,并按此方式调用:
@IBAction func refreshComments() {
CommentsTableViewController.refresh()
}
但是这样我得到一个错误,我无法读取变量2
print(variable2) - 实例成员' variable2'不能用于类型' CommentsTableViewController'
有什么想法吗?
答案 0 :(得分:1)
在容器中处理控制器到控制器有点困难。尝试以编程方式填充容器。否则你将无法控制控制器。
您也可以使用通知,但通知不应用于一对一通信。
以编程方式创建
现在你有一个控制器属性,你可以运行任何公共功能。
很抱歉没有代码示例。我目前没多少时间:)
通知
您的主视图控制器将向特定名称发送通知,并且CommentsViewController将观察此通知并在接收时执行操作。
NSNotificationCenter.defaultCenter().postNotificationName(name:"YourNameYouLike")
在commentsViewController中,您会看到此通知。
NSNotificationCenter.defaultCenter().addObserverForName(name:"theSameNameThatYourPostNotificationDidUse", object: nil, queue: mainQueue) { [weak self] in
guard s = self else { return }
s.reload()
}
答案 1 :(得分:0)
您应该将控制器存储在调用者的属性中。您可以从属性调用刷新函数,变量可以更改。
答案 2 :(得分:0)
不确定如何设置视图控制器层次结构,但每次需要调用CommentsTableViewController
函数时都不应初始化refresh
。
在variable2
内相信您的CommentsTableViewController
被修改并保留所提到的动态值,您应该在已存在的refresh
对象上调用CommentsTableViewController
函数最新和最伟大的财产价值。
希望这对你有意义!