您的问题的答案取决于您在第二个视图中想要对数据执行的操作。
如果您打算只在第二个视图中吐出信息而不修改它,那么您可以通过视图结构的初始化程序将数据传递给您的第二个视图。
方法 1:更简单、不具约束力的解决方案
使用您的array
变量跟踪所有字符串输入,用@State
.
struct InputView: View {
@State var array: [String] = []
var body: some View {
// Add your list of string inputs here,
// as well as your Append button...
}
}
在您的第二个视图中,具有您要显示的字符串的属性(没有初始化值)。
struct OutputView: View {
var displayString: String
var body: some View {
// Display your String here using Text...
}
}
然后,在您InputView
的 'sbody
中,将随机元素从array
into传递给OutputView
. 如果您的数组没有元素,您应该考虑传递一个默认值。
NavigationLink(destination: OutputView(displayString: array.randomElement() ?? "none") {
Text("To next page")
}
方法二:在另一个View中使用Binding修改
如果您需要在传递到您的值后修改它OutputView
,请考虑使用Binding
.
在您的InputView
中,您可以将整个数组作为 a 传递Binding<Array<String>>
到您的OutputView
中,前提OutputView
是准备好在您的类实现中Binding
使用包装器来处理变量。@Binding
struct OutputView: View {
@Binding var array: [String]
// Display a random element from array here.
// When you modify array, it will also modify the array
// property that belongs to InputView.
var body: some View {
// ...
}
}
您需要使用$
运算符将数组作为Binding<>
.
struct InputView: some View {
@State var array: [String] = []
var body: some View {
// ...
NavigationLink(destination: OutputView(array: $array) {
Text("To next page")
}
// ...
}
}