我的视图控制器:
class myViewController: UIViewController {
var myvar = 0
func count() {
print(myvar)
myvar+=1
}
}
其他视图控制器:
Interval(1) {
myViewController().count()
}
上面的代码是我到目前为止的代码。但似乎有一个大问题:
名为myvar
的var得到了一些新的初始化,所以总是得到它的默认值“0”。
为什么qazxsw poi在调用qazxsw poi后重置?我怎样才能摆脱这种行为?
编辑:之前从未加载过“myViewController”,这可能导致问题?!
编辑:必须有一些其他方式,然后只生成实例。因为多个文件正在使用多个实例,这将再次导致错误! (导致重置)
任何帮助都会非常感激:)
回答你的两个问题:
myViewController
是你的班级。 myViewController().count()
是一个类的实例。您可能拥有无限数量的一个类的实例。默认情况下,所有这些都将具有值myViewController
。如果你希望看到其他东西而不是myViewController()
那么你应该得到一个类的特定实例,你增加了0
变量。
没有办法摆脱这个。这是它的工作原理。
解决方案:请与我们分享您的业务逻辑/目标/解释您想要实现的目标/您在建设什么/最终结果是什么?
但我的猜测是你想要这样做:
0
更新:如果它没有被调用然后调用它:)可能设置“初始视图控制器”。
myvar
是视图控制器实现的名称。 let myControllerInstance = myViewController()
myControllerInstance.count()
myControllerInstance.count()
print(myControllerInstance.myvar) // expect 2 here
是对该视图控制器实现的初始化程序的调用,没有任何参数。这意味着,myViewController
创建了一个新实例。你调用myViewController()
,它会增加值,但是对于新创建的实例。
这里你需要的是获得你在屏幕上显示的单个myViewController()
实例的引用。如果不了解视图控制器的层次结构,就无法告诉您如何获取它(尽管您现在应该知道什么是问题以及如何处理它)。
每次调用myViewController()。count()时,都在初始化myViewController的新实例。
我想你应该有类似的东西:
myViewController().count()
名为
myViewController
的var得到了一些新的初始化
不是那种,它确实得到了新的初始化。
存在一个常见的错误/误解:默认初始化程序 let myVC = myViewController()
Interval(1) {
myVC.count()
}
始终创建一个全新的控制器实例,它与所有其他实例不同,而且 - 更重要的是 - 来自故事板中设计的实例。
你可以摆脱这个问题的方式取决于你的设计,这是不清楚的。
问题
myvar
这行代码就在这里创建了一个myViewController的新实例。创建myViewController时,myvar设置为零。这就是为什么每次调用interval函数时myVar都会“重置为零”。
myViewController()
编写类以使其更明显的更明确的方法是:
myViewController()
解
var myvar = 0 //Called whenever you use myViewController()
专业提示
欢迎来到编程世界!我为你感到非常兴奋!
坚持使用标准命名约定:将ViewController重命名为ViewController。
不要在名为count的函数中增加变量。从逻辑上讲,这没有任何意义。有人,甚至你,后来可能会使用这个函数,并忘记count()会增加内部变量。相反,改变计数来做到这一点,得到计数。
专业版修订
class myViewController: UIViewController {
var myvar: Int
init() {
myvar = 0
}
...
建议阅读
let vc: myViewController = myViewController()
Interval(1) {
vc.count()
}
class MyViewController: UIViewController {
var myvar = 0
func count() -> Int {
return myvar
}
func incrementCount() {
myvar += 1
}
}
...
let vc = MyViewController()
Interval(1) {
print(vc.count())
vc.incrementCount()
}