objectWillChange требует, чтобы типы 'T.ObjectWillChangePublisher' и 'ObservableObjectPublisher' были эквивалентными - PullRequest
0 голосов
/ 07 марта 2020

Я получаю сообщение об ошибке:

objectWillChange требует, чтобы типы 'ViewModelType.ObjectWillChangePublisher' и 'ObservableObjectPublisher' были эквивалентны

Есть идеи, как обойти это?

import SwiftUI
final class MyViewModel: ObservableObject & SomeViewModelProtocol {
    @Published var name: String
    init(name: String) {
        self.name = name
    }
}

struct MainView: View {
    @EnvironmentObject var viewModel: MyViewModel

    var body: some View {
        VStack() {
            MyView<MyViewModel>()
        }
    }
}

protocol SomeViewModelProtocol {}

struct MyView<ViewModelType: ObservableObject & SomeViewModelProtocol>: View {

    @EnvironmentObject var viewModel: ViewModelType
    var body: some View {
        return VStack {
            Text("")
            .onReceive(self.viewModel.objectWillChange, perform: {
                print("onReceive")
            })
        }
    }
}

1 Ответ

0 голосов
/ 07 марта 2020

Возможно, вы просто получаете ошибочное сообщение об ошибке от компилятора. Модификатор onReceive(_:perform:) требует закрытия одного аргумента, но вы передаете закрытие нулевого аргумента. Попробуйте вместо этого:

        .onReceive(self.viewModel.objectWillChange, perform: { _ in
// ----------------------------------------------------------- ^^^^ add this
            print("onReceive")
        })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...