ios - 使用 SwiftUI 从结构中的完成变量调用方法
问题描述
我正在使用 SwiftUI。我有一个全局变量 aviewModel
有一个完成。我正在尝试找到一种方法来调用此类中的方法来增加动作。
struct ContentView: View {
let viewModel = TimerViewModel(totalTime: 15, finished: {
print("I need it to call a method here")
})
我试过让它可选然后在init中设置它但仍然得到这个错误:
转义闭包捕获变异的“自我”参数
我希望你能帮忙。
解决方案
您会收到一个错误,因为您尝试ContentView
从TimerViewModel
.
调用完成方法的另一种方法是在以下位置创建一个@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
}
}
}
}
推荐阅读
- java - Android/MySQL:如何根据与登录用户关联的部门显示数据?
- django - Django - 我如何检查过滤条件内的日期是否已过期
- spring - Neo4j 中是否需要有初始脚本,就像 rdbms 存储需要初始 CREATE(和其他 DDL 脚本)脚本来插入、更新等?
- c# - ITI 是否存在相当于“Memset”或“SecureZeroMemory”的 C#
- hazelcast - Hazelcast:: 在客户端设置 RingBuffer 容量
- android - 显示刷新率支持的 Android TV 和电视盒以支持实时视频播放,
- nginx - 如何更改 vue-cli 热重载端点(sockjs)的主机?
- python - 将带有图像的 Excel 工作表转换为 PDF 文件
- java - 使用@Query 时为方法使用命名参数
- vue.js - webpack 运行构建但不退出命令