我正在使用 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/