ios - SwiftUI:ViewModifier 不监听 onReceive 事件

标签 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
        }
    }
}

SwiftUI旨在禁止 onReceiveViewModifier 内执行或者它是一个错误?我在现实生活中的项目中有一个 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/

相关文章:

ios - 如何在苹果 map 中绘制两个位置之间的路线。通过 openURL

ios - Sqlite.swift 获取行值

iphone - 为什么我的 UIView 在加载完成后不保持透明?

swift - 误用 guard 语句代替 nil 检查

swift - 当@State 变量以高频率刷新 View 时,导航栏/工具栏按钮工作不可靠

SwiftUI:路径.anchorPreference

ios - 快速从 dataTaskWithURL 获取进度

ios - Facebook 权限 iOS

ios - 基于数组键的Swift动态属性设置

ios - UIViewControllerRepresentable 包装在 AnyView 中时无法正常工作