ios - 使用 SwiftUI 从结构中的完成变量调用方法

标签 ios swift swiftui

我正在使用 SwiftUI。我有一个 viewModel 的全局变量有一个完成。我正在尝试找到一种方法来调用此类中的方法来增加 Action 的香味。

struct ContentView: View {

let viewModel = TimerViewModel(totalTime: 15, finished: {
    print("I need it to call a method here")
})
我试过让它可选然后在init中设置它但仍然得到这个错误:

Escaping closure captures mutating 'self' parameter


我希望你能帮忙。

最佳答案

由于您尝试修改 ContentView,您收到错误消息。从TimerViewModel 内部.
调用完成方法的替代方法是创建 @Published TimerViewModel 中的属性(property):

class TimerViewModel: ObservableObject {
    @Published var finished = false // it can be Bool or anything you want to pass to your View

    func end() {
        finished = true
    }
}
并在 View 中捕获其变化:
struct ContentView: View {
    @ObservedObject var viewModel = TimerViewModel()
    
    var body: some View {
        VStack {
            Text("Text")
        }
        .onReceive(viewModel.$finished) { finished in
            if finished {
                // timer has finished, you can call some method now
            }
        }
    }
}

关于ios - 使用 SwiftUI 从结构中的完成变量调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62504286/

相关文章:

ios - 不应在主线程上调用该方法,因为这可能会导致 UI 无响应

ios - UIPasteboard无法多次复制带有过期时间的文本

ios - 除非缓存图像,否则 TableView 单元格的格式不正确

Swift Radio Streaming AVPlayer

swift - Swift 4 中的尾递归(尾调用优化)

ios - 键盘扩展中的preferredScreenEdgesDeferringSystemGestures不起作用

SwiftUI 更改 SF Symbol 内部透明部分的颜色

swiftui - @FocusState 以编程方式生成的 TextField

javascript - 带有 ios 的 Phonegap 中的 Facebook javascript sdk?

ios - 不能 "addSubView"