我有一个自定义的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
是否被设计成不允许在 ViewModifier
中执行 onReceive
,还是这是一个 bug?在我的实际项目中有一个视图,里面放了一些业务逻辑在 onReceive
中导致视图变得越来越大,因此我需要通过将它与 onReceive
分离来清理视图。