如何在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中的视图之间传递变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中的类和视图之间共享数据

将变量从 UIHostingController 传递到 SWIFTUI 视图

如何将一个 SwiftUI 视图作为变量传递给另一个视图结构

如何在 SwiftUI 中的 PageViewController 中传递一些视图?

如何在 swiftui 中为子视图设置私有状态变量?

如何将通用视图传递给 SwiftUI 中的结构