重置 - 问题 UIViewController
reset - issue UIViewController
我的视图控制器:
class myViewController: UIViewController {
var myvar = 0
func count() {
print(myvar)
myvar+=1
}
}
其他视图控制器:
Interval(1) {
myViewController().count()
}
上面的代码是我目前得到的代码。不过好像有个大问题:
名为 myvar
的 var 进行了某种新的初始化,因此始终将其设为默认值“0”。
为什么 myViewController
在调用 myViewController().count()
后会重置?我怎样才能摆脱这种行为?
编辑:"myViewController" 以前从未加载过,也许这会导致问题?!
编辑: 除了生成实例之外,还必须有其他方法。因为多个文件正在使用多个实例,这将再次导致错误! (导致重置)
任何帮助将不胜感激:)
每次调用 myViewController().count() 时,您都在初始化 myViewController 的新实例。
我猜你应该有这样的东西:
let myVC = myViewController()
Interval(1) {
myVC.count()
}
回答您的两个问题:
- 为什么:
myViewController
是你的 Class。 myViewController()
是 class 的一个实例。您可能拥有一个 class 的无限数量的实例。默认情况下,所有这些都将具有值 0
。如果您希望看到其他内容而不是 0
,那么您应该获得 class 的特定实例,其中您增加了 myvar
变量。
- 如何摆脱:
没有办法摆脱这个。这就是它的工作原理。
解决方案:请与我们分享您的业务逻辑/目标/说明您想要实现什么/您正在构建什么/最终结果是什么?
但我猜你想这样做:
let myControllerInstance = myViewController()
myControllerInstance.count()
myControllerInstance.count()
print(myControllerInstance.myvar) // expect 2 here
更新:如果它没有被调用然后调用它:)也许设置一个"initial view controller".
myViewController
是您的视图控制器实现的名称。 myViewController()
是对该视图控制器实现的初始值设定项的调用,不带任何参数。这意味着,myViewController()
创建一个新实例。您调用 myViewController().count()
,这会增加值,但对于那个新创建的实例。
您在这里需要的是获取对您在屏幕上显示的单个 myViewController
实例的引用。如果不了解更多关于视图控制器的层次结构,就不可能告诉您如何获得它(尽管您现在应该知道什么是问题以及如何解决它)。
The var called myvar
gets kind of new initialized
不是,它确实得到了新的初始化。
有一个常见的错误/误解:默认初始化程序 myViewController()
始终创建控制器的全新实例,它不同于所有其他实例,更重要的是,不同于故事板中设计的实例。
解决该问题的方式取决于您的设计,目前还不清楚。
问题
myViewController()
此处的这行代码创建了一个新的 myViewController 实例。 myvar 在创建 myViewController 时设置为零。这就是每次调用间隔函数时 myVar 显示为 "being reset to zero" 的原因。
var myvar = 0 //Called whenever you use myViewController()
一种更明确的方式来编写您的 class 以使其更明显:
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()
}
推荐阅读
我的视图控制器:
class myViewController: UIViewController {
var myvar = 0
func count() {
print(myvar)
myvar+=1
}
}
其他视图控制器:
Interval(1) {
myViewController().count()
}
上面的代码是我目前得到的代码。不过好像有个大问题:
名为 myvar
的 var 进行了某种新的初始化,因此始终将其设为默认值“0”。
为什么 myViewController
在调用 myViewController().count()
后会重置?我怎样才能摆脱这种行为?
编辑:"myViewController" 以前从未加载过,也许这会导致问题?!
编辑: 除了生成实例之外,还必须有其他方法。因为多个文件正在使用多个实例,这将再次导致错误! (导致重置)
任何帮助将不胜感激:)
每次调用 myViewController().count() 时,您都在初始化 myViewController 的新实例。
我猜你应该有这样的东西:
let myVC = myViewController()
Interval(1) {
myVC.count()
}
回答您的两个问题:
- 为什么:
myViewController
是你的 Class。 myViewController()
是 class 的一个实例。您可能拥有一个 class 的无限数量的实例。默认情况下,所有这些都将具有值 0
。如果您希望看到其他内容而不是 0
,那么您应该获得 class 的特定实例,其中您增加了 myvar
变量。
- 如何摆脱:
没有办法摆脱这个。这就是它的工作原理。
解决方案:请与我们分享您的业务逻辑/目标/说明您想要实现什么/您正在构建什么/最终结果是什么?
但我猜你想这样做:
let myControllerInstance = myViewController()
myControllerInstance.count()
myControllerInstance.count()
print(myControllerInstance.myvar) // expect 2 here
更新:如果它没有被调用然后调用它:)也许设置一个"initial view controller".
myViewController
是您的视图控制器实现的名称。 myViewController()
是对该视图控制器实现的初始值设定项的调用,不带任何参数。这意味着,myViewController()
创建一个新实例。您调用 myViewController().count()
,这会增加值,但对于那个新创建的实例。
您在这里需要的是获取对您在屏幕上显示的单个 myViewController
实例的引用。如果不了解更多关于视图控制器的层次结构,就不可能告诉您如何获得它(尽管您现在应该知道什么是问题以及如何解决它)。
The var called
myvar
gets kind of new initialized
不是,它确实得到了新的初始化。
有一个常见的错误/误解:默认初始化程序 myViewController()
始终创建控制器的全新实例,它不同于所有其他实例,更重要的是,不同于故事板中设计的实例。
解决该问题的方式取决于您的设计,目前还不清楚。
问题
myViewController()
此处的这行代码创建了一个新的 myViewController 实例。 myvar 在创建 myViewController 时设置为零。这就是每次调用间隔函数时 myVar 显示为 "being reset to zero" 的原因。
var myvar = 0 //Called whenever you use myViewController()
一种更明确的方式来编写您的 class 以使其更明显:
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()
}
推荐阅读