【问题标题】:Transfer of variable values between different views in SwiftUI在 SwiftUI 中不同视图之间传递变量值
【发布时间】:2020-08-24 04:44:41
【问题描述】:

我是一个绝对的初学者,所以请放纵我。我在 Stack Overflow 和其他地方查看了许多答案,我认为这些答案可能会给我一个解决方案,但似乎没有一个有效。

我真正想做的是将计算变量的值从一个视图转移到另一个视图。

作为一个糟糕的选择,因为它需要大量的返工,我可以将计算工作的变量的值转移到第二个视图(首选工作表,但我可以使用另一个视图)并执行而是在那里计算。

我尝试过绑定、ObservableObject、Observed var、Published var,但似乎都不起作用。

用于计算的基本变量是使用@State 从第一个视图中的列表视图派生的,因此每个变量都是一个@State var。有七个变量,每个变量都有自己的数组。

【问题讨论】:

    标签: binding swiftui


    【解决方案1】:

    如果您不想更改DetailView 中的值,以下是一个示例:

    struct ContentView: View {
        @State private var currentCount = 0
    
        var body: some View {
            NavigationLink(destination: DetailView(count: currentCount)) {
                Text("Tap Here!")
            }
        }
    }
    
    struct DetailView: View {
        var count: Int
    
        var body: some View {
            Text("\(count)")
        }
    }
    

    这是一个示例,如果您想要更改使值可从DetailView 更改。在这种情况下,您需要使用@Binding

    struct ContentView: View {
        @State private var currentCount = 0
    
        var body: some View {
            VStack {
                Text("\(currentCount)")
    
                NavigationLink(destination: DetailView(count: $currentCount)) {
                    Text("Tap Here!")
                }
            }
        }
    }
    
    struct DetailView: View {
        @Binding var count: Int
    
        var body: some View {
            VStack {
                Text("\(count)")
    
                Button(action: {
                    self.count += 1
                }) {
                    Text("Increase!")
                }
            }
        }
    }
    

    【讨论】:

    • 好的。我已经尝试过了,但现在 PreviewProvider 不起作用,所以我无法测试它以查看变量是否被拖过。 MainView 中的变量称为 selectedGender,我在第二个视图中调用了该变量genderSelection。 PreviewProvider 的代码如下所示: struct Insurer1View_Previews: PreviewProvider { static var previews: some View { Insurer1View(genderSelection: $selectedGender) } }
    • 在模拟器上试试
    • 请接受答案,因为它解决了您提出的问题。
    • 我尝试使用模拟器而不是预览。我//视图中的预览首先显示了错误,然后尝试了模拟器,但不幸的是,这不起作用。我在调用 MainPage.swift 中收到错误:参数“genderSelection”的缺少参数。 (抱歉,在我使用上面的“MainView”之前,但“MainPage”是正确的)。
    • 我接受了答案,但我无法投票,因为我作为新用户的“声誉”太低了。 @SwiftiSwuft
    【解决方案2】:

    这是一次只对一个变量执行此操作的最简单方法。要做到更多,请遵循有关 ObservedObject 的完整教程,直到您掌握了该概念。没有 ObservedObject,我无法制作应用程序。或者我可以,但这就像把一只手绑在背后一样。无论如何,对于一个:

    在子视图中,这样写变量:

    @Binding var passedDownList: [Item]
    

    然后你使用 $ 语法来调用子视图,比如文本字段和东西。

    MySubView(passedDownList: $myList)
    

    那里。数组将在两个视图之间同步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多