Não tenho certeza se esse é um antipadrão neste admirável mundo SwiftUI em que vivemos, mas basicamente tenho um @EnvironmentObject com algumas informações básicas do usuário salvas, que meus pontos de vista podem chamar.
Eu também tenho um @ObservedObject que possui alguns dados necessários para esta exibição.
Quando a exibição aparecer, desejo usar esse @EnvironmentObject para inicializar o @ObservedObject:
struct MyCoolView: View {
@EnvironmentObject userData: UserData
@ObservedObject var viewObject: ViewObject = ViewObject(id: self.userData.UID)
var body: some View {
Text("\(self.viewObject.myCoolProperty)")
}
}
Infelizmente, não consigo chamar a variável de ambiente até depois da inicialização:
"Não é possível usar o membro da instância 'userData' no inicializador de propriedades; os inicializadores de propriedades são executados antes que 'self' esteja disponível."
Eu posso ver algumas rotas possíveis adiante, mas todas elas se parecem com hacks. Como devo abordar isso?
init
à estrutura.Property wrappers are not yet supported on local properties
Basicamente, estou dizendo que não posso criar um @ObservedObject em um método init.Respostas:
Aqui está a abordagem (a IMO mais simples):
fonte
em vez de criar uma subvisão, você pode adicionar um inicializador fictício ao seu
"ViewObject"
para que você possa chamá-lo antes de chamar o inicializador realpara o registro eu não testei
fonte
Aqui está uma maneira fácil de fazer isso:
Com este ajudante que faz funcionar:
fonte