Могу ли я использовать @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"
}
}
вам нужно будет определить все объекты нужного типа в прямом порядке, даже если они вам не нужны