gpt4 book ai didi

variables - 在 View 之间传递变量 SwiftUI

转载 作者:行者123 更新时间:2023-12-02 02:01:37 25 4
gpt4 key购买 nike

又是基本问题:我想让变量“anytext”对我将要添加的所有 future View 可见和可访问。在我的例子中,变量将是一个 String

  1. 如果它是一个Float,程序会改变吗?
  2. 如何将其保存为全局变量?
  3. 如果我重新启动应用程序,变量会自行删除吗?以及如何保存即使在重新启动应用程序后仍会保留的变量?

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()
}
}

最佳答案

在应用的 Root View 或任何“子” View 可能需要访问anytext 的地方创建并传入环境对象。将 anytext 存储为该 ObservedObject 中的 @Published 属性。

那是一个指针,但会有很多类似的问题和内容。这是一个HWS article这可能会有所帮助。

这是一个例子:

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)
}
}

结果:

Result

所有三个 View 都有它们可以访问的 model,以获取 anytext 属性。

回答您的问题:

  1. 您使用@Published,因为StringFloatDouble 等都是值类型。

  2. 使用环境对象,如此处所示。

  3. 它们不会持久化,请参阅 @AppStorage 以保存它。

关于variables - 在 View 之间传递变量 SwiftUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68952701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com