重置 - 发出UIViewController

问题描述 投票:1回答:5

我的视图控制器:

class myViewController: UIViewController {
   var myvar = 0

   func count() {
     print(myvar)
     myvar+=1 
   }

}

其他视图控制器:

Interval(1) {
  myViewController().count()
}

上面的代码是我到目前为止的代码。但似乎有一个大问题:

名为myvar的var得到了一些新的初始化,所以总是得到它的默认值“0”。

为什么qazxsw poi在调用qazxsw poi后重置?我怎样才能摆脱这种行为?

编辑:之前从未加载过“myViewController”,这可能导致问题?!


编辑:必须有一些其他方式,然后只生成实例。因为多个文件正在使用多个实例,这将再次导致错误! (导致重置)

任何帮助都会非常感激:)

ios swift viewcontroller
5个回答
0
投票

回答你的两个问题:

  1. 为什么:

myViewController是你的班级。 myViewController().count()是一个类的实例。您可能拥有无限数量的一个类的实例。默认情况下,所有这些都将具有值myViewController。如果你希望看到其他东西而不是myViewController()那么你应该得到一个类的特定实例,你增加了0变量。

  1. 如何摆脱:

没有办法摆脱这个。这是它的工作原理。

解决方案:请与我们分享您的业务逻辑/目标/解释您想要实现的目标/您在建设什么/最终结果是什么?

但我的猜测是你想要这样做:

0

更新:如果它没有被调用然后调用它:)可能设置“初始视图控制器”。


0
投票

myvar是视图控制器实现的名称。 let myControllerInstance = myViewController() myControllerInstance.count() myControllerInstance.count() print(myControllerInstance.myvar) // expect 2 here 是对该视图控制器实现的初始化程序的调用,没有任何参数。这意味着,myViewController创建了一个新实例。你调用myViewController(),它会增加值,但是对于新创建的实例。

这里你需要的是获得你在屏幕上显示的单个myViewController()实例的引用。如果不了解视图控制器的层次结构,就无法告诉您如何获取它(尽管您现在应该知道什么是问题以及如何处理它)。


0
投票

每次调用myViewController()。count()时,都在初始化myViewController的新实例。

我想你应该有类似的东西:

myViewController().count()

0
投票

名为myViewController的var得到了一些新的初始化

不是那种,它确实得到了新的初始化。

存在一个常见的错误/误解:默认初始化程序 let myVC = myViewController() Interval(1) { myVC.count() } 始终创建一个全新的控制器实例,它与所有其他实例不同,而且 - 更重要的是 - 来自故事板中设计的实例。

你可以摆脱这个问题的方式取决于你的设计,这是不清楚的。


0
投票

问题

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() }

© www.soinside.com 2019 - 2024. All rights reserved.