SwiftUI: ViewModifier не слушает события onReceive - PullRequest
1 голос
/ 13 апреля 2020

У меня есть пользовательский ViewModifier, который просто возвращает тот же контент, к которому добавлен модификатор onReceive, onReceive не запускается, вот пример кода, который вы можете скопировать, вставить и запустить в XCode:

import SwiftUI
import Combine

class MyViewModel: ObservableObject {
    @Published var myProperty: Bool = false
}
struct ContentView: View {
    @ObservedObject var viewModel: MyViewModel

    var body: some View {
        Text("Hello, World!")
        .modifier(MyOnReceive(viewModel: viewModel))
            .onTapGesture {
                self.viewModel.myProperty = true
        }
    }
}

struct MyOnReceive: ViewModifier {
    @ObservedObject var viewModel: MyViewModel

    func body(content: Content) -> some View {
        content
            .onReceive(viewModel.$myProperty) { theValue in
                print("The Value is \(theValue)") // <--- this is not executed
        }
    }
}

SwiftUI предназначен для запрета onReceive на выполнение внутри ViewModifier или это ошибка? У меня есть представление в моем реальном жизненном проекте, которое расширяется с помощью бизнес-логики c, помещенной внутрь onReceive, поэтому мне нужно очистить это представление, отделив его от onReceive.

1 Ответ

1 голос
/ 14 апреля 2020

хорошо, это работает для меня:

func body(content: Content) -> some View {
    content
        .onAppear()   // <--- this makes it work
        .onReceive(viewModel.$myProperty) { theValue in
            print("-----> The Value is \(theValue)") // <--- this will be executed
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...