Могу ли я использовать @EnvironmentObject в SwiftUI для всех общих данных? - PullRequest
0 голосов
/ 11 января 2020

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

1 Ответ

0 голосов
/ 11 января 2020

Во-первых, @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"
    }
}

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

...