Sobes.tech
Junior — Middle

El lehet kerülni a StateObject használatát bizonyos helyzetekben?

sobes.tech MI

Válasz az MI-től

Igen, bizonyos szcenáriókban el lehet hagyni az @StateObject használatát.

Az @StateObject arra szolgál, hogy egy ObservableObject objektumot hozzon létre és tároljon egy nézeten belül, hogy az újrarajzolások során megmaradjon. Ha az objektum a nézeten kívül jön létre és van kezelve (például egy szülő komponensben vagy Dependency Injection segítségével), akkor az alnézetek @ObservedObject vagy @EnvironmentObject segítségével hozzáférhetnek ehhez az objektumhoz anélkül, hogy újra kellene létrehozniuk.

Példa:

class Model: ObservableObject {
    @Published var value = 0
}

struct ParentView: View {
    @StateObject private var model = Model()

    var body: some View {
        ChildView(model: model)
    }
}

struct ChildView: View {
    @ObservedObject var model: Model

    var body: some View {
        Text("Érték: \(model.value)")
    }
}

Itt az @StateObject csak a szülő nézetben van használatban, és a gyermek nézet a @ObservedObject segítségével kapja meg a hivatkozást. Így, ha az objektum a nézeten kívül jön létre vagy felülről van átadva, az @StateObject nem kötelező.