微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NavigationLInk 101:如何将数据从主机发送到辅助视图?

如何解决NavigationLInk 101:如何将数据从主机发送到辅助视图?

目标:通过 NavigationLink 将每个列表行的 struct 简单地传递到辅助视图。

Baby Step(先前目标): 只需将字符串数组的一个成员传递给辅助视图。

问题: 次要视图期望参数调用中的 Binding-String 值与上下文中的 closure String 值。

所以我必须在调用之前将 @State var 设置为当前/上下文值。

那是我的问题。我不能简单地将绑定变量等同于当前上下文变量;因为在 SwiftUI 中,此类语句仅限于基于视图的内容

这不起作用:

enter image description here

这是实际的代码

import SwiftUI
  
struct ContentView: View {
    @State var name = ""   //... load with inital value to avoid having to add a call parameter.
    
    var body: some View {
        let myArray = ["Larry","Moe","Curly"]
        NavigationView {
            List(myArray,id: \.self) { theStooge in
                NavigationLink(destination: SecondView(stoogeName: theStooge)) {
                    Text(theStooge)
                }
            }
            .navigationBarTitle("Three Stooges").navigationBarTitledisplayMode(.inline)
        }
    }
}

struct SecondView: View {
    @Binding var stoogeName: String
    var body: some View {
        Text("Hello \(name)")
    }
}

我只能通过 NavigationLink 的目标参数中的 Text("Hello World") 创建 SecondView。但这不是很有帮助。我想将数据(数据结构)传递给每个列表成员的辅助视图。

但是我需要设置一个绑定变量。 如何?
我是否需要陪审团装配 EnvironmentObject 或 Singleton?

解决方法

绑定可以设置为动态属性,但您的数组是常量局部变量。以下是使用绑定的可能解决方案:

struct ContentView: View {
    @State var name = ""   //... load with inital value to avoid having to add a call parameter.
    
    @State private var myArray = ["Larry","Moe","Curly"]

    var body: some View {
        NavigationView {
            List(myArray.indices,id: \.self) { index in
                NavigationLink(destination: SecondView(stoogeName: $myArray[index])) {
                    Text(myArray[index])
                }
            }
            .navigationBarTitle("Three Stooges").navigationBarTitleDisplayMode(.inline)
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?