我有一个自定义 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
内执行或者它是一个错误?我在现实生活中的项目中有一个 View ,该 View 通过放入一些业务逻辑而变得更大 onReceive
,所以我需要通过将其与 onReceive
分开来清理该 View .
最佳答案
好的,这对我有用:
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
}
}
关于ios - SwiftUI:ViewModifier 不监听 onReceive 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61190398/