首页 > 解决方案 > 使用 SwiftUI 从结构中的完成变量调用方法

问题描述

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

struct ContentView: View {

let viewModel = TimerViewModel(totalTime: 15, finished: {
    print("I need it to call a method here")
})

我试过让它可选然后在init中设置它但仍然得到这个错误:

转义闭包捕获变异的“自我”参数

我希望你能帮忙。

标签: iosswiftswiftui

解决方案


您会收到一个错误,因为您尝试ContentViewTimerViewModel.

调用完成方法的另一种方法是在以下位置创建一个@Published属性TimerViewModel

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

推荐阅读