我有一个自定义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
}
}
}
Run Code Online (Sandbox Code Playgroud)
被SwiftUI设计为禁止onReceive向内部执行ViewModifier或者是一个错误吗?我在我的现实生活项目中有一个视图,它会随着一些业务逻辑的放入而变得更大onReceive,所以我需要通过将它与onReceive.
wor*_*dog 13
好的,这对我有用:
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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1931 次 |
| 最近记录: |