Estoy tratando de crear un contenedor de propiedades personalizado compatible con SwiftUI, lo que significa que los cambios en los valores de propiedades correspondientes causarían una actualización de la vista SwiftUI. Aquí hay una versión simplificada de lo que tengo:
@propertyWrapper
public struct Foo: DynamicProperty {
@ObservedObject var observed: SomeObservedObject
public var wrappedValue: [SomeValue] {
return observed.value
}
}
Veo que incluso si mi ObservedObject
está contenido dentro de mi contenedor de propiedades personalizadas, SwiftUI aún captura los cambios SomeObservedObject
siempre que:
- Mi contenedor de propiedades es una estructura
- Mi envoltorio de propiedad se ajusta a
DynamicProperty
Desafortunadamente, los documentos son escasos y me cuesta mucho saber si esto solo funciona por suerte con la implementación actual de SwiftUI.
Los documentos de DynamicProperty
(dentro de Xcode, no en línea) parecen indicar que dicha propiedad es una propiedad que se cambia desde el exterior, lo que hace que la vista se vuelva a dibujar, pero no hay garantía sobre lo que sucede cuando se ajustan sus propios tipos a este protocolo.
¿Puedo esperar que esto continúe funcionando en futuros lanzamientos de SwiftUI?
fuente
Respuestas:
Ok ... aquí hay un enfoque alternativo para obtener algo similar ... pero como estructura solo se
DynamicProperty
envuelve@State
(para forzar la actualización de la vista).Es un contenedor simple, pero ofrece la posibilidad de encapsular cualquier cálculo personalizado con la siguiente actualización de vista ... y, como se dijo, utilizando tipos de solo valor.
Aquí está la demostración (probada con Xcode 11.2 / iOS 13.2):
Aquí está el código:
fuente