1

ClassSwiftUI が機能しなくなるため、最近、 a のモックを作成する必要があることに気づきpreviewました。残念ながら、次のエラーが表示されます。

Property type 'T' does not match that of the 'wrappedValue' property of its wrapper type 'EnvironmentObject'

ビュー構造体で:

struct ContentView<T>: View {
    @EnvironmentObject var mockFoobar: T
    ...
}

また、エラー:

Type of expression is ambiguous without more context

Preview 構造体の場合:

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        let mockFoobar: MockFoobar = MockFoobar()
        return ContentView<MockFoobar>()
            .environmentObject(mockFoobar)
    }
}

MockFoobar クラスは次のとおりです。

class MockFoobar: ObservableObject {
  ...
}

ユーザー@Aspergiが親切に提供してくれたように、提案されたとおりに次のことをテストしました。

class Foobar: ObservableObject {
    @Published var param: Bool = false
    func start() {
        self.param = true
    }
}

struct MyFoobarView<T: ObservableObject>: View {
    @EnvironmentObject var foobar: T

    var body: some View {
        VStack {
            Text("Hello Foobar")
        }
        .onAppear {
            self.foobar.start()
        }
    }
}

struct MyFoobarView_Previews: PreviewProvider {
    static var previews: some View {
        let foobar: Foobar = Foobar()
        return MyFoobarView()
            .environmentObject(foobar)
    }
}

しかし、次のエラーが発生します ( .onAppearPreviewProvider の最初のエラーと 2 番目のエラー):

Cannot call value of non-function type 'Binding<Subject>'

Generic parameter 'T' could not be inferred
4

1 に答える 1