variables - 在视图之间传递变量 SwiftUI
问题描述
再次提出基本问题:我想让变量“ anytext ”对我要添加的所有未来视图可见和可访问。在我的情况下,变量将是一个String。
- 如果它是Float程序会改变吗?
- 如何将其保存为全局变量?
- 如果我重新启动应用程序,变量是否会自行删除?以及如何保存即使在重新启动应用程序后仍会保留的变量?
import SwiftUI
struct Entry: View {
@State var anytext: String = ""
var body: some View {
VStack {
TextField("Enter text here", text: $anytext)
.padding()
.border(Color.black, width: 1)
.padding()
}
}
}
struct Entry_Previews: PreviewProvider {
static var previews: some View {
Entry()
}
}
解决方案
在应用程序的根视图或任何“子”视图可能需要访问anytext
. anytext
作为@Published
属性存储在ObservedObject
.
这是一个指针,但会有很多类似的问题和东西。这是一篇可能会有所帮助的HWS 文章。
这是一个例子:
class MyModel: ObservableObject {
@Published var anytext = ""
}
struct ContentView: View {
@StateObject private var model = MyModel()
var body: some View {
Entry().environmentObject(model)
}
}
struct Entry: View {
@EnvironmentObject private var model: MyModel
var body: some View {
VStack {
TextField("Enter text here", text: $model.anytext)
.padding()
.border(Color.black, width: 1)
.padding()
TextDisplayer()
}
}
}
struct TextDisplayer: View {
@EnvironmentObject private var model: MyModel
var body: some View {
Text(model.anytext)
}
}
结果:
model
他们可以访问所有三个视图以获取anytext
属性。
要回答您的问题:
您使用
@Published
因为String
,Float
等Double
都是值类型。使用环境对象,如此处所示。
它们不会被持久化,请参阅
@AppStorage
保存。
推荐阅读
- angular - RxJS Observable - 如果第一个事件在前 x 分钟内没有发出,则返回,否则继续 x+y 分钟
- java - JavaFx如何在运行像api这样的线程时避免窗口冻结/不响应
- python - 如何在二维数组中找到一个值的 x 轴和 y 轴索引?
- google-chrome-arc - 弧焊机第一次使用时下载失败
- php - 如何在 Codeigniter 中转义数据库连接详细信息中的字符
- python - 如何在单次训练期间保存和快照机器学习模型?
- python-3.x - 无法使用 OpenCV 从摄像头获取视频
- php - 如何使用虚拟主机将动态子域提供给位于 docroot 中的文件夹
- swift - 显示日期和时间
- reactjs - 如何制作50%成功率的按钮?