Я не уверен, является ли это антипаттерном в этом прекрасном новом мире SwiftUI, в котором мы живем, но по сути у меня есть объект @EnvironmentObject с некоторой базовой пользовательской информацией, которая может быть вызвана моими представлениями.
У меня также есть @ObservedObject, которому принадлежат некоторые данные, необходимые для этого представления.
Когда появится представление, я хочу использовать этот @EnvironmentObject для инициализации @ObservedObject:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
К сожалению, я не могу вызвать себя для переменной окружения, пока после инициализации:
«Невозможно использовать экземпляр экземпляра userData в инициализаторе свойства; инициализаторы свойства запускаются до того, как станет доступным« self ».»
Я вижу несколько возможных маршрутов, но все они чувствуют себя как хаки. Как мне подойти к этому?
init
в структуру.Property wrappers are not yet supported on local properties
сути, это говорит о том, что я не могу создать @ObservedObject в методе init.Ответы:
Вот подход (самый простой ИМО):
источник
вместо создания подпредставления вы можете добавить фиктивный инициализатор в свой,
"ViewObject"
чтобы вы могли вызвать его до вызова реального инициализаторадля записи я не проверял
источник
Вот простой способ сделать это:
С этим помощником, который заставляет его работать:
источник