如何在swiftui中的视图之间传递变量?
Posted
技术标签:
【中文标题】如何在swiftui中的视图之间传递变量?【英文标题】:How do I pass variables between views in swiftui? 【发布时间】:2021-01-24 16:49:05 【问题描述】:我希望用户能够在视图 1 的 TextField 中输入一些文本,然后根据用户输入的内容,返回的 html 会有所不同。因此,在初始化 loadData 函数之前分配“值”变量非常重要。
因此,如果用户在文本字段中输入 1,则 url 将如下所示: “www.example.com/1”
输出(网站上显示的内容)例如是: “这是第 1 号链接”
如果用户在 TextField 中输入 70,则 url 将如下所示: “www.example.com/70”
然后输出: "这是第 70 号链接"
我有这段代码,但我需要找到一种方法,通过 TextField 输入分配一个值 var。
查看 1:
struct ContentView: View
@EnvironmentObject var value1: ViewModel
var body: some View
if value1.page == 0
VStack
TextField("", text: $value1.value)
Button(action: value1.page = 1)
Text("To next view")
.frame(width: 300, height: 100, alignment: .center)
else
TestView()
视图2:
class ViewModel: ObservableObject
@Published var value:String = ""
@Published var page = 0
struct TestView: View
var url = URL(string: "www.example.com/\(value)")
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
var body: some View
VStack
Text(loadData(from: url))
Button(action: ViewModel.init().page = 0)
Text("To next view")
.frame(width: 300, height: 100, alignment: .center)
然后输出: "这是第 70 号链接"
【问题讨论】:
【参考方案1】:您可以像这样将 URL 直接传递给 TestView。在 TestView 中声明 URL 作为参数..
struct TestView: View
var url: URL?
然后像这样传递它
TestView(url: URL(string: "www.example.com/\(value1.value)"))
【讨论】:
有没有办法,我可以将它传递给一个视图,而不是一个结构?类似:struct urlTest var url: URL? 或类“class urlTest var url: URL?以上是关于如何在swiftui中的视图之间传递变量?的主要内容,如果未能解决你的问题,请参考以下文章
将变量从 UIHostingController 传递到 SWIFTUI 视图
如何将一个 SwiftUI 视图作为变量传递给另一个视图结构