如何在swiftui中的视图之间传递数据?
Posted
技术标签:
【中文标题】如何在swiftui中的视图之间传递数据?【英文标题】:How to pass data between views in swiftui? 【发布时间】:2021-01-21 11:05:10 【问题描述】:我有一个视图,我希望用户在其中输入数据。然后我希望用户能够按下将用户引导到另一个视图的按钮。并且根据用户之前输入的值,我希望更改链接。该链接位于顶层,因为我不止一次需要它。因此,例如,如果用户输入“89”,我希望链接为“https://www.example.com/89”。
这是第一个视图的代码:
class lClass: ObservableObject
@Published var longitude: String = ""
struct Data: View
@State var showGraph = false
@ObservedObject var longitude2 = lClass()
var body: some View
Button(action:
self.showGraph.toggle()
)
Text("Show Graph")
.sheet(isPresented: $showGraph)
GraphView()
if showGraph
GraphView()
else
HStack
TextField("Longitude:", text: $longitude2.longitude)
.frame(width: 400, height: 100, alignment: .center)
这是第二个视图的缩短代码:
var month = 1
var day = 1
var year = 2020
var latitude = 59.911232
var longitude = 10.757933
var offset = "1.0"
class test
@ObservedObject var longitude2 = lClass()
class test2
var car = test.init().longitude2
private let url = URL(string: "https://midcdmz.nrel.gov/apps/spa.pl?syear=\(year)&smonth=\(month)&sday=\(day)&eyear=\(year)&emonth=\(month)&eday=\(day)&otype=0&step=60&stepunit=1&hr=12&min=0&sec=0&latitude=\(latitude)&longitude=\(longitude)&timezone=\(offset)&elev=53&press=835&temp=10&dut1=0.0&deltat=64.797&azmrot=180&slope=0&refract=0.5667&field=0")
private func loadData(from url: URL?) -> String
guard let url = url else
return "nil"
let html = try! String(contentsOf: url, encoding: String.Encoding.utf8)
return html
let html = loadData(from: url)
private func dbl1() -> Double
let leftSideOfTheValue = "0:00:00,"
let rightSideOfTheValue = "\(month)/\(day)/\(year),1:00:00,"
guard let leftRange = html.range(of: leftSideOfTheValue) else
print("cant find left range")
return 0
guard let rightRange = html.range(of: rightSideOfTheValue) else
print("cant find right range")
return 0
let rangeOfTheValue = leftRange.upperBound..<rightRange.lowerBound
return Double(html[rangeOfTheValue].dropLast()) ?? 90
struct elevationGraph: View
var body: some View
Text(String(dbl1())
最后,我希望用户能够在第一个视图中选择变量、月、日、年、经度、纬度、偏移量。然后操作 url 使其使用用户输入的数据。
【问题讨论】:
【参考方案1】:所以问题是我如何在应用程序的视图中更新和共享信息。
做到这一点的一种方法是使用一个或多个在视图更新时不会被破坏的常见对象。为此,代码要么需要在View
结构之外创建对象。或者在实例化对象的View
中使用@StateObject
。
创建后,实例可以作为@ObservedObject
参数的参数传递给子视图。或者如果在app中多处、多关卡使用,可以通过@EnvironmentObject
放置到环境中提取,避免“道具钻”
这两个 *** 链接应该有助于澄清:
@ObservedObject vs @StateObject @EnvironmentObject祝你好运。
【讨论】:
以上是关于如何在swiftui中的视图之间传递数据?的主要内容,如果未能解决你的问题,请参考以下文章