如何使用 TextField 更新全局变量?

时间:2021-01-23 10:53:28

标签: swift swiftui global-variables

我在多个视图中需要一些变量,我希望用户能够更改这些变量。这些变量编辑链接,因此例如根据经度是什么结果是不同的。我从链接中获得的值显示在图表中。

所以我希望用户能够为给定的变量输入他们自己的值(在下面的代码中)。我不在乎它是否在同一个视图中,或者是否由两个视图组成并且变量与图形一起传递给视图。

唯一重要的是,当用户单击按钮时,图表和链接会刷新,以便显示正确的图表。

另一件重要的事情是,我需要能够访问顶级变量。这是我到目前为止的代码,但它显示了错误:

<块引用>

无法将“字符串”类型的值转换为预期的参数类型“绑定”

import SwiftUI


var month = "1"
var day = "1"
var year = "2020"

var latitude = "59.911232"

var longitude = "10.757933"

var offset = "1.0"


struct ContentView: View {
    var body: some View {
        GraphView()
        TextField(text: latitude)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

1 个答案:

答案 0 :(得分:3)

TextField 需要绑定到某些动态属性的真实来源。如果您想全局保留这些值,请将它们包装到视图模型的某个共享实例中,例如

final class Params: ObservableObject {
  static let global = Params()

  var month = "1"
  var day = "1"
  var year = "2020"

  var latitude = "59.911232"

  var longitude = "10.757933"

  var offset = "1.0"
}

所以现在我们可以从视图中观察(并更新和绑定到)这些参数

struct ContentView: View {
    @ObservedObject var global = Params.global

    var body: some View {
        GraphView()
        TextField(text: $global.latitude)
    }
}