Могу ли я использовать @EnvironmentObject в SwiftUI для всех общих данных?

Есть @State, @ObservedObject а также @EnvironmentObject привязки в SwfitUIдля обмена данными между представлениями и другими объектами. У каждого есть свое предназначение, но@EnvironmentObjectкажется самым мощным и простым в использовании. Итак, могу ли я использовать его для всех переменных состояния и общих данных? Есть ли у этого недостатки?

1 ответ

Решение

Первый, @EnvironmentObjectдля занятий. Поэтому, если вы хотите привязать примитивный тип, такой как Int, вы можете использовать толькоBinding. Во-вторых, я думаю, что возникнут проблемы, если вы попытаетесь определить более одного@EnvironmentObjectтого же типа. Итак, когда вы можете использоватьBinding- ты должен это сделать. Это только мое желание.

class SomeClass: ObservableObject{
    @Published var value: Int
    init(value: Int){
        self.value = value
    }
}
struct ContentView: View {
    @State var one: SomeClass = SomeClass(value: 1)
    @State var two: SomeClass = SomeClass(value: 2)
    var body: some View {
        Adss().environmentObject(one).environmentObject(two)
    }
}
struct Adss: View{
    @EnvironmentObject var two: SomeClass
    var body: some View{
        Text("there must be two: \(two.value)")//prints "1"
    }
}

вам нужно будет определить все объекты нужного типа в прямом порядке, даже если они вам не нужны

Другие вопросы по тегам