swiftui - Swift 检测视图中另一个视图对变量的更改
问题描述
我有以下课程
class GettingData: ObservableObject {
var doneGettingData = false
{
didSet {
if doneGettingData {
print("The instance property doneGettingData is now true.")
} else {
print("The instance property doneGettingData is now false.")
}
}
}
}
我正在更新 mapView 结构中的变量 doneGettingData,然后我将在我的主视图 (contentView) 中使用该结构。这个变量在地图加载时从 false / true 改变,我可以从我在课堂上使用的打印中检测到它,所以我知道它正在改变。我想用它来触发 ContentView 中的微调器,其中我有以下代码:
import SwiftUI
import Combine
struct ContentView: View {
var done = GettingData().doneGettingData
var body: some View {
VStack {
MapView().edgesIgnoringSafeArea(.top)
Spacer()
Spinner(isAnimating: done, style: .large, color: .red)
}
}
struct Spinner: UIViewRepresentable {
let isAnimating: Bool
let style: UIActivityIndicatorView.Style
let color: UIColor
func makeUIView(context: UIViewRepresentableContext<Spinner>) -> UIActivityIndicatorView {
let spinner = UIActivityIndicatorView(style: style)
spinner.hidesWhenStopped = true
spinner.color = color
return spinner
}
func updateUIView(_ uiView: UIActivityIndicatorView, context: UIViewRepresentableContext<Spinner>) {
isAnimating ? uiView.startAnimating() : uiView.stopAnimating()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我应该怎么做才能使变量随着打印而变化但在视图内部发生变化?我尝试了很多选择,但没有任何效果!谢谢
解决方案
发布您的资源
class GettingData: ObservableObject {
@Published var doneGettingData = false
}
然后观察数据并将该实例传递MapView
给使用,因此在内部修改该属性
struct ContentView: View {
@ObservedObject var model = GettingData()
var body: some View {
VStack {
MapView(dataGetter: model).edgesIgnoringSafeArea(.top)
Spacer()
Spinner(isAnimating: model.doneGettingData, style: .large, color: .red)
}
}
推荐阅读
- r - 使用 varImp 返回错误:$ 运算符对原子向量无效
- appcelerator - Appcelerator 应用程序在装有 iOS 12 beta 11 的 iPhone X 上崩溃
- python - 不适用于数据集的转换
- python - Python 从 SQL 中检索列值
- unity3d - 当粒子第一次从 Unity 中的粒子系统发射时,有没有办法为粒子应用函数?
- office365 - 如何使用 Graph API 获取委托邮箱列表
- react-native - React Native-如何在 React Native 中显示一次启动视频?
- c# - C# Process DataReceivedEventHandler 只工作一次
- python - 如何将 3d 数组写入文本文件
- javascript - React Refs woth setState 给出了最大更新深度。