У меня есть класс MyContainer, в котором в качестве переменной есть другой пользовательский класс.Этот другой класс, MyInterface, является суперклассом контроллера представления, который расширяется двумя другими дочерними пользовательскими классами, MyVCA и MyVCB.Причина этого в том, что у меня есть нижняя кнопка, которая используется на обоих экранах - только контент должен обновляться каждый раз, что я делаю программно.Есть также менеджер контента, который я использую, чтобы узнать, какой из двух дочерних классов использовать, под названием MyContentManager.
Проблема, с которой я сталкиваюсь, заключается в том, что при переходе от предыдущего контроллера представления к MyVCA или MyVCB,потому что в зависимости от того, какая это, определенная задача должна быть выполнена или нет.Я создаю экземпляр представления для MyVCB из раскадровки следующим образом:
let vc = UIStoryboard(name: "Containers",
bundle: Bundle.main).instantiateViewController(withIdentifier:
"my_container") as! MyContainer
vc.contentManager = MyContentManager(type: .type_my_vc_a)
vc.shouldDoTask = true
self.navigationController?.pushViewController(vc, animated: true)
Как видно, я создал флаг shouldDoTask, который должен быть установлен в этой точке (внутри предыдущего контроллера представления).Но поскольку он настроен на суперкласс контейнера, дети не могут получить к нему доступ.Так что в принципе должно произойти, что этот флаг должен распространяться по пути MyContainer -> MyInterface -> MyVCA / MyVCB.
Я попытался использовать свойство для флага в MyInterface:
private var _shouldDoTask: Bool = false
var shouldDoTask: Bool {
set { _shouldDoTask = newValue }
get { return _shouldDoTask }
}
И в MyContainer:
var content: MyInterface!
var shouldDoTask: Bool {
set {
if content != nil {
content.shouldDoTask = newValue
}
}
get {
return (content != nil)
? content.shouldDoTask
: false
}
}
Затем в MyVCA / MyVCB я могу получить к нему доступ так:
class MyVCA: MyInterface {
func someMethod() {
if self.shouldDoTask {
// do task
}
}
}
Это будет работать хорошо, если бы это не былодля факта, что содержание все еще ноль, когда флаг установлен в предыдущем контроллере представления.Это понятно, потому что, конечно, MyInterface еще не был создан.Я ищу способ преодолеть это.Я думал о методе, который можно было бы вызвать в методе MyInterface viewDidLoad для установки флага, но я не могу понять это.
Любые идеи приветствуются.