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

Swa*_*and 1 global-variables swift swiftui

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

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

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

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

无法将“string”类型的值转换为预期的参数类型“Binding”

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()
    }
}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 5

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"
}
Run Code Online (Sandbox Code Playgroud)

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

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

    var body: some View {
        GraphView()
        TextField(text: $global.latitude)
    }
}
Run Code Online (Sandbox Code Playgroud)