[英]Call a method from a completion variable in a struct with SwiftUI
我正在使用 SwiftUI。 我有一個具有完成的viewModel
的全局變量。 我正在嘗試找到一種方法來調用此 class 中的方法來進行操作。
struct ContentView: View {
let viewModel = TimerViewModel(totalTime: 15, finished: {
print("I need it to call a method here")
})
我試過讓它可選然后在init中設置它但仍然得到這個錯誤:
Escaping 閉包捕獲變異的“自我”參數
我希望你能幫忙。
您會收到錯誤消息,因為您嘗試從TimerViewModel
內部修改ContentView
。
調用完成方法的替代方法是在TimerViewModel
中創建@Published
屬性:
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
}
}
}
}
這是可能的方法。
struct ContentView: View {
var viewModel: TimerViewModel? = nil // needs to be initialized
init() {
// assign function directly instead of via capturing closure
viewModel = TimerViewModel(totalTime: 15, finished: timerCallback)
}
var body: some View {
Text("Demo")
}
private func timerCallback() {
// do anything needed here
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.