Zum Hauptinhalt springen
tsecurity.de LIVE
Echtzeit-Radar & Feeds
Alle RSS Feeds
👥 Community & Social
Sichere ProgrammierungMCP Tool Poisoning: A Name Allowlist Is Not Enough(22.09.2026 um 18:56 Uhr)
Sichere ProgrammierungGiggleGigs: A Job Board That Actually Uses AI Where It Helps(22.09.2026 um 18:57 Uhr)
Sichere ProgrammierungThe Bootstrapped SaaS Flywheel: How to Hit $10k MRR Without VC Capital(22.09.2026 um 19:05 Uhr)
Sichere ProgrammierungThe container was running software nobody built(22.09.2026 um 19:08 Uhr)
Sichere ProgrammierungYour Terminal Tasks, Everywhere: Introducing Tasku Cloud(22.09.2026 um 19:08 Uhr)
Sichere ProgrammierungMCP Tool Poisoning: A Name Allowlist Is Not Enough(22.09.2026 um 18:56 Uhr)
Sichere ProgrammierungGiggleGigs: A Job Board That Actually Uses AI Where It Helps(22.09.2026 um 18:57 Uhr)
Sichere ProgrammierungThe Bootstrapped SaaS Flywheel: How to Hit $10k MRR Without VC Capital(22.09.2026 um 19:05 Uhr)
Sichere ProgrammierungThe container was running software nobody built(22.09.2026 um 19:08 Uhr)
Sichere ProgrammierungYour Terminal Tasks, Everywhere: Introducing Tasku Cloud(22.09.2026 um 19:08 Uhr)
Intelligence View
⚡ tsecurity.de Intelligence

[SUI] Inyectando objeto observable al ambiente

En lugar de inyectar una dependencia de un objeto a otro, en una jerarquía larga de componentes, se puede inyectar el modelo al ambiente ("environment") y luego leerlo de él. Modelo de tipo Observable En el caso de que el m…

0
↗ Quelle (dev.to)
Reagiere als Erste:r — dein Feedback zählt!

En lugar de inyectar una dependencia de un objeto a otro, en una jerarquía larga de componentes, se puede inyectar el modelo al ambiente ("environment") y luego leerlo de él.






Modelo de tipo Observable



En el caso de que el modelo de la aplicación sea de tipo Observable:




  1. Se debe retener la instancia a él por medio del property wrapper @State.

  2. Se debe inyectar la instancia al ambiente de la jerarquía de una vista (al que tienen acceso sus subvistas) con el modificador environment(_:).

  3. Luego, la vista que necesite hacer uso de aquel objeto Observable, tendrá que crear una propiedad con el "property wrapper" @Environment




@Observable
class Library {
var books: [Book] = [Book(), Book(), Book()]

var availableBooksCount: Int {
books.filter(\.isAvailable).count
}
}









@main
struct BookReaderApp: App {
@State private var library = Library()

var body: some Scene {
WindowGroup {
LibraryView()
.environment(library)
}
}
}









struct LibraryView: View {
@Environment(Library.self) private var library

var body: some View {
// ...
}
}






Si no se envuelve entre paréntesis el tipo de la propiedad Observable (en este caso, Library.self), habrá un error de compilación.



En caso de que sea posible que el objeto del ambiente no exista al momento de leer (en este caso, dentro de LibraryView), entonces se puede hacer que el tipo sea opcional, para que asigne nil en lugar de arrojar una excepción.




struct LibraryView: View {
// ⚠️ Notar que aquí library es opcional
@Environment(Library.self) private var library: Library?

var body: some View {
// ...
}
}









Inyectando al ambiente con un KeyPath



También se puede usar un keypath para inyectar el valor al ambiente, con environment(_:_:):




@main
struct BookReaderApp: App {
@State private var x = Library()

var body: some Scene {
WindowGroup {
LibraryView()
.environment(\.ciertaBiblioteca, x)
}
}
}






Luego, se puede usar el mismo keypath para leer el valor:




struct LibraryView: View {
@Environment(\.ciertaBiblioteca) private var library

var body: some View {
// ...
}
}






Sin embargo, primero hay que crear la entrada en los EnvironmentValues:




extension EnvironmentValues {
@Entry var ciertaBiblioteca: Library = Library()
}









Creando un Binding al Environment de tipo Observable



Cuando se inyecta directamente un objeto de tipo Observable a una vista, se usa el "property wrapper" @Bindable para tener una referencia bidireccional. Al inyectarlo por medio de una variable de ambiente, ya se está usando el "property wrapper" @Environment. Por esta razón, hay que crear una nueva variable con el property wrapper @Bindable dentro del body haciendo referencia a la variable recibida con @Environment.



Por ejemplo:




@Observable
class Library {
var books: [Book] = [Book(), Book(), Book()]
// ⚠️ Se agregó esta variable para guardar el título
var title: String = ""

var availableBooksCount: Int {
books.filter(\.isAvailable).count
}
}









struct LibraryView: View {
@Environment(\.ciertaBiblioteca) private var library

var body: some View {
// ⚠️ Observar que el @Bindable no tiene que tener el mismo nombre que @Environment
@Bindable var bindableLibrary = library
Text("Mi biblioteca")
TextField("Ingrese título", text: $bindableLibrary.title)
// ...
}
}









Modelo de tipo ObservableObject



En el caso de que el modelo de la aplicación sea de tipo ObservableObject:




  1. Se debe retener la instancia a él por medio de los property wrapper @ObservedObject o @StateObject.

  2. Se debe inyectar la instancia al ambiente de la jerarquía de una vista (al que tienen acceso sus subvistas) con el modificador environmentObject(_:).

  3. Luego, la vista que necesite hacer uso de aquel objeto ObservableObject, tendrá que crear una propiedad con el "property wrapper" @EnvironmentObject




class Library: ObservableObject {
@Published var books: [Book] = [Book(), Book(), Book()]

var availableBooksCount: Int {
books.filter(\.isAvailable).count
}
}









@main
struct BookReaderApp: App {
@StateObject private var x = Library()

var body: some Scene {
WindowGroup {
LibraryView()
.environmentObject(x)
}
}
}









struct LibraryView: View {
@EnvironmentObject private var library: Library

var body: some View {
Text("Hola")
// ...
}
}


Ähnliche Beiträge
🔍 Verwandte News

Auch interessante Nachrichten [SUI] Inyectando objeto observable al ambiente

Thematisch verwandte Begriffe: Inyectando, objeto, observable, ambiente · 6 Treffer

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Laden...

Beiträge werden geladen ...

Laden...

Videos werden geladen ...

Zum Aktualisieren ziehen
ZERO-DAY CVE-2026-75517 | Novu provides an API for sending notifications through multiple channels…
Advisory →
TTS Reader • tsecurity.de Voice
tsecurity.de Icon
tsecurity.de App
Offline-Lesen, Eilmeldungen & 0ms Ladezeit

Installiere tsecurity.de direkt auf deinen Home-Bildschirm für das ultimative Vollbild-Magazinerlebnis ohne Browser-Leisten.

Nächster Beitrag
Themen-Radar & Intelligence Matrix
Echtzeit-Taxonomie nach Angriffsvektoren & Plattformen

tsecurity.de Live Threat Radar

🔴 LIVE RADAR
MONITORING
AKTIV
CVE-DATENBANK
LIVE
🔍
Community Radar & Live Chat
Sentinel Bot online • Live-Stream
Dein Cluster: Security Explorer
Match:
lädt…
Verbindung zum Community-Stream wird aufgebaut...
Bearbeitungsmodus — Senden überschreibt deine Nachricht
Community-Puls — was gerade passiert
lädt…
Aktivitäten deiner Analysten
lädt…
Neues Thema oder Eilmeldung einreichen

Reiche interessante Links, Zero-Days oder Debatten ein. Die Community entscheidet per Upvote über die Veröffentlichung.

Heiß diskutierte Einreichungen
🔖 Gespeicherte Artikel
📂 Keine gespeicherten Artikel vorhanden.
Zurück Ziehen Vor
Links: vorheriger Artikel Rechts: nächster Artikel unten: schließen
News NIS-2 Frühwarnung Tier-1 Intel ⏱️ 3 Min vor 10 Min
Artikeldaten werden geladen...

Zurück: vorheriger Vor: nächster
↗ Original-Quelle
Social Reaktionen Deine Reaktion zählt
Einstufung & Relevanz-Poll 0 Stimmen
In sozialen Netzwerken teilen 1-Klick