我正在尝试使用 NavigationLink() 按钮转到四个视图之一,并且我希望它是随机的。
我尝试使用随机变量和 switch 函数,但事实证明我无法修改 NavigationLink() 按钮内的变量(它给了我这个错误:类型 '()' 无法符合 'View'),就像我一样会在一个普通的按钮中。这就是我得到的:
导入 SwiftUI
结构ContentView:视图{ @State var valore = Int.random(in: 1...4)
var body: some View {
NavigationStack {
NavigationLink {
switch valore {
case 1:
ContentView1()
case 2:
ContentView2()
case 3:
ContentView3()
case 4:
ContentView4()
default:
ContentView()
}
} label: {
Image("Retro")
.resizable()
.cornerRadius(27.0)
.aspectRatio(contentMode: .fit)
.padding()
}
Text("\(valore)")
.bold()
.font(.title)
}
}
} 我想“重新随机化”每个案例中的变量“valore”,以便当它返回时数字已经改变,因此它将进入下一个视图。
您可以利用属性包装器。
在您的 ContentView1...4 上,为每个视图声明一个 Binding var,如下所示:
@Binding var valore: Int
在每个 ContentView1...4 内添加一个
.onAppear
并更新其中的值:
struct ContentView1: View {
@Binding var valore: Int
var body: some View {
VStack {
Text("Content 1")
}
.onAppear {
valore = Int.random(in: 1...4)
}
}
}
这将自动更改 valore 值。
您的 ContentView 应如下所示:
struct ContentView: View {
@State private var valore = Int.random(in: 1...4)
var body: some View {
NavigationStack {
NavigationLink {
switch valore {
case 1:
ContentView1(valore: $valore)
case 2:
ContentView2(valore: $valore)
case 3:
ContentView3(valore: $valore)
case 4:
ContentView4(valore: $valore)
default:
ContentView1(valore: $valore)
}
} label: {
Image("Retro")
.resizable()
.cornerRadius(27.0)
.aspectRatio(contentMode: .fit)
.padding()
}
Text("\(valore)")
.bold()
.font(.title)
}
}
希望有帮助
你可以做这样的事情。我不确定这是否是您想要的,因为从技术上讲我没有使用 NavigationLink,但这使用了一个开关来转到随机视图。如果您不想点击按钮,可以设置状态值 onappear(){} 以自动导航到随机视图。
var body: some View {
VStack {
if valore == 0 {
Text("Click For Random View")
.bold()
.font(.title)
.onTapGesture {
// set range to how ever many cases you have
myview = Int.random(in: 1...4)
}
}
switch valore {
case 1:
ContentView1()
case 2:
ContentView2()
case 3:
ContentView3()
case 4:
ContentView4()
default:
VStack{}
}
}
}