【发布时间】:2016-10-07 10:39:17
【问题描述】:
我有一个名为 RootViewController 的主 UIViewController
import UIKit
class RootViewController: UIViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
}
}
还有 2 个名为 oneViewController 和 twoViewController 的子控制器继承 RootViewController 为:(另请阅读我的 cmets)
import UIKit
class oneViewController: RootViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
amIaccessible = true // I have initialized this variable of RootViewController
}
}
import UIKit
class twoViewController: RootViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
print(amIaccessible) // it should print true as initialized in oneViewController but its printing false :(
}
}
现在的问题是,我的 oneViewController 是我的应用程序的初始视图,而 twoViewController 是在第一个视图之后初始化的第二个视图,所以我希望 RootViewController 成为我的单例类型控制器,它可以在整个应用程序生命周期中保存我的变量和方法。我怎样才能做到这一点?
我不需要像单独的单例类这样的解决方案,我知道这样也像制作一个可以在整个应用程序执行过程中保存变量的共享实例。 所以请给我使用继承关系的解决方案
【问题讨论】:
-
将变量放在视图控制器而不是单独的模型对象(我当然会推荐)中的问题是您无法控制视图控制器的生命周期。 iOS 可以随意创建和销毁它们,对此您无能为力。如果您想使对该单例对象的访问变得透明,请将计算属性或函数添加到您的基本视图控制器以隐藏对集中式单例的访问。
-
您对类继承的工作方式存在误解。
RootViewController不是单身人士。它只是其他两个视图控制器中的每一个的超类。每个视图控制器都有自己的由RootViewController声明的属性实例,在一个视图控制器实例中更改super.amIaccessible不会更改其在另一个实例中的值。
标签: ios swift inheritance