У меня есть пользовательский 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
.