SwiftUI:ViewModifier 不监听 onReceive 事件

JAH*_*lia 6 ios swift swiftui

我有一个自定义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)

  • 这个`.onAppear()`将在视图出现后延迟发布者的事件。 (4认同)