У меня есть главный UIViewController имени RootViewController вПочему унаследованная переменная не инициализирована в swift?
import UIKit
class RootViewController: UIViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
}
}
и 2 subcontrollers имени oneViewController и twoViewController наследуемых 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 :(
}
}
Теперь проблема заключается в том, что My oneViewController является первоначальным видом моего приложения, а twoViewController - вторым представлением, инициализированным после первого представления, поэтому я хочу, чтобы Root ViewController - мой контроллер одноэлементного типа, который может содержать мои переменные и методы на протяжении всего жизненного цикла приложения. Как я могу это достичь?
Мне не нужно решение, как отдельный одиночный класс, я знаю, что так же, как создание общего экземпляра, который может содержать переменные во время выполнения приложения. Поэтому, пожалуйста, дайте мне решение с помощью наследования отношения
Проблема с размещением переменных в контроллере представления вместо sep arate model object (что я, конечно же, рекомендую), заключается в том, что вы не контролируете жизненный цикл контроллеров представлений. iOS создает и уничтожает их по своему усмотрению, и вы ничего не можете с этим поделать. Если вы хотите сделать доступ к этому объекту singleton прозрачным, добавьте рассчитанные свойства или функции в контроллер базового представления, чтобы скрыть доступ к вашему централизованному синглтону. – dasblinkenlight
У вас есть непонимание того, как работает наследование классов. 'RootViewController' не является синглом. Это просто суперкласс каждого из ваших двух других контроллеров. Каждый контроллер представления имеет свой собственный экземпляр свойств, объявленных 'RootViewController' Shanging' super.amIaccessible' в одном экземпляре контроллера просмотра, не изменит его значение в другом. – Paulw11