Estou tentando criar um wrapper de propriedade personalizado suportado pelo SwiftUI, o que significa que alterações nos valores das propriedades correspondentes causariam uma atualização na exibição do SwiftUI. Aqui está uma versão simplificada do que eu tenho:
@propertyWrapper
public struct Foo: DynamicProperty {
@ObservedObject var observed: SomeObservedObject
public var wrappedValue: [SomeValue] {
return observed.value
}
}
Vejo que, mesmo que meu ObservedObject
esteja contido dentro do meu wrapper de propriedade personalizado, o SwiftUI ainda captura as alterações SomeObservedObject
desde que:
- Meu invólucro de propriedade é uma estrutura
- Meu invólucro de propriedade está em conformidade com
DynamicProperty
Infelizmente, os documentos são escassos e tenho dificuldade em dizer se isso só funciona com a implementação atual do SwiftUI.
Os documentos de DynamicProperty
(no Xcode, não on-line) parecem indicar que essa propriedade é alterada externamente, fazendo com que a exibição seja redesenhada, mas não há garantia sobre o que acontece quando você conforma seus próprios tipos a este protocolo.
Posso esperar que isso continue funcionando em versões futuras do SwiftUI?
fonte
Respostas:
Ok ... aqui está uma abordagem alternativa para obter uma coisa semelhante ... mas como struct apenas
DynamicProperty
envolvida@State
(para forçar a atualização da visualização).É um invólucro simples, mas oferece a possibilidade de incluir todos os cálculos personalizados com a seguinte atualização de exibição ... e, como dito, usando tipos somente de valor.
Aqui está a demonstração (testada com o Xcode 11.2 / iOS 13.2):
Aqui está o código:
fonte