Palabras clave
@ObservableObject / @Publicado
@ObservedObject
El uso de es@State
muy similar a , por el nombre parece que se usa para modificar un objeto, y este objeto puedeView
ser usado por múltiples independientes. Si usa@ObservedObject
para modificar un objeto, entonces ese objeto debe implementarObservableObject
el protocolo y luego usar@Published
para modificar las propiedades en el objeto, lo que indica que esta propiedad debe serSwiftUI
monitoreada
@EnvironmentObject
@EnvironmentObject
Los decoradores son para el medio ambiente global. A través de él, podemos evitar crear en elView
momentoObservableObject
, pero obtenerlo del entorno.ObservableObject
@EnvironmentObject
La forma en que funciona es queEnvironment
busca la instancia requerida de
@Estado
-
Al usar
@State
el decorador podemos asociarView
el estado del . Las propiedadesSwiftUI
que se han usado con@State
el decorador en un área de memoria especial, y esta áreaView struct
está aislada del . Cuando cambie@State
la propiedad decorada ,SwiftUI
se basará en el el nuevo valor de propiedad recrea la vista -
Crear una variable con un valor inicial
@State private var isPlaying: Bool = false
@Vinculante
- A veces, pasaremos un atributo de vista a un nodo secundario, pero no se puede pasar directamente al nodo secundario, porque el formulario de transmisión de valor
Swift
es el método de transmisión de tipo de valor, es decir, el que se pasa al nodo secundario es un valor copiado. . Pero después de ser modificado por@Binding
el decorador , el atributo se convierte en un tipo de referencia y la transferencia se convierte en una transferencia de referencia, de modo que el estado de la vista padre-hijo se puede asociar - Al pasar atributos, use
$
para pasar
@Ambiente
- A través de las propiedades
@Environment
modificadas abrimos una transformación que monitorea información a nivel de sistema, en este ejemplo una vez queCalendar, Locale, ColorScheme
ocurra una transformaciónCalendarView
se refrescará
struct CalendarView: View {
@Environment(\.calendar) var calendar: Calendar
@Environment(\.locale) var locale: Locale
@Environment(\.colorScheme) var colorScheme: ColorScheme
var body: some View {
return Text(locale.identifier)
}
}