ios SwiftUI:在作用域中找不到模型?

hkmswyz6  于 12个月前  发布在  iOS
关注(0)|答案(2)|浏览(181)

我有以下代码:

@Observable class Car {
    var year:Int
    init(year:Int) {
        self.year = year
    }
}

struct CarView: View {
//    @State var model = Car(year: 1) // <-- works
    @Environment(Car.self) var model:Car // <-- Error: Cannot find '$model' in scope
    var body: some View {
        CarSubView(year: $model.year)
    }
}

struct CarSubView: View {
    @Binding var year:Int
    var body: some View {
        Button {
            year += year
        } label: {
            Text("TEST")
        }
    }
}

所以我不明白为什么当我使用@Environment(Car.self) var model:Car而不是@State var model = Car(year: 1)时会得到错误Cannot find '$model' in scope
我通过环境传递Car模型,我想我可以将年份绑定到CarSubView
当模型通过环境进入视图时,我如何将年份作为绑定传递到CarSubView
谢谢你

laik7k3q

laik7k3q1#

按如下方式更改您的CarView:

struct CarView: View {
    @Environment(Car.self) var model: Car

    var body: some View {
        @Bindable var model = model // <-- this is the key part
        CarSubView(year: $model.year)
    }
}
nue99wik

nue99wik2#

这个应该可以

class Car: ObservableObject {
    var year: Int
    init(year:Int) {
        self.year = year
    }
}

struct CarView: View {
//    @ObservedObject var model: Car
    @EnvironmentObject var model: Car // if you want to inject into the environment
    
    var body: some View {
        CarSubView(year: $model.year)
            .environmentObject(model)
    }
}

struct CarSubView: View {
    @Binding var year: Int
    
    var body: some View {
        Button {
            year += year
        } label: {
            Text("TEST")
        }
    }
}

相关问题