gpt4 book ai didi

ios - 为什么继承的变量没有在swift中初始化?

转载 作者:行者123 更新时间:2023-11-30 13:00:55 29 4
gpt4 key购买 nike

我有一个名为 RootViewController 的主 UIViewController

import UIKit
class RootViewController: UIViewController {
var amIaccessible: Bool = false

override func viewDidLoad() {
super.viewDidLoad()
}
}

和 2 个名为 oneViewController 和 TwoViewController 的子 Controller 继承 RootViewController 为:(另请阅读我的评论)

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 是我的应用程序的初始 View ,而twoViewController 是第一个 View 之后初始化的第二个 View ,所以我希望 RootViewController 成为我的单例类型 Controller ,它可以在整个应用程序生命周期中保存我的变量和方法。我怎样才能实现这一目标?

我不需要像单独的单例类这样的解决方案,我知道这种方式也像创建一个可以在整个应用程序执行过程中保存变量的共享实例。所以请给我使用继承关系的解决方案

最佳答案

以下是您应该研究的一些事项

class oneViewController: RootViewController {
var amIaccessible: Bool = false // here you are overridding the amIaccessible property. so if you will use this with oneViewController object it will always gives you overridden property value

override func viewDidLoad() {
super.viewDidLoad()
amIaccessible = true // here you are changing the overridden amIaccessible property value. if you want to change super class propert value you should use super keyword.
print(self.amIaccessible) // true
print(super.amIaccessible) // false


// for e.g super.amIaccessible = true // in the same way access it with super keyword.
}
}

如果在 twoViewController 中,如果您想访问 RootViewController 的 amIaccessible 属性,则必须将 super 与属性一起使用,并且如果您从 oneViewController 更改 amIaccessible 属性的值 你无法在 twoViewController 中获得相同的值,因为 iOS 会为每个对象创建新属性,并在从内存中释放时杀死它们。

class twoViewController: RootViewController {
var amIaccessible: Bool = false

override func viewDidLoad() {
super.viewDidLoad()
print(super.amIaccessible) // it will always gives you false
}

}

关于ios - 为什么继承的变量没有在swift中初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39915291/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com