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