SwiftUI@State变量未及时赋值
我想展示两张床单。他们中的一个进行了辩论。 当我试图显示第二张工作表时,该代码崩溃,因为未指定强制展开的参数。即使我在更新触发工作表显示的变量之前分配了它,也会发生这种情况。SwiftUI@State变量未及时赋值,swift,swiftui,Swift,Swiftui,我想展示两张床单。他们中的一个进行了辩论。 当我试图显示第二张工作表时,该代码崩溃,因为未指定强制展开的参数。即使我在更新触发工作表显示的变量之前分配了它,也会发生这种情况。 someArgument怎么可能仍然为零 这是再现错误所需的全部代码: enum ActiveSheet: Identifiable { case first, second var id: Int { hashValue } } struct ContentView: View
someArgument
怎么可能仍然为零
这是再现错误所需的全部代码:
enum ActiveSheet: Identifiable {
case first, second
var id: Int {
hashValue
}
}
struct ContentView: View {
@State var activeSheet: ActiveSheet?
@State var someArgument: String?
var body: some View {
VStack {
Button {
activeSheet = .first
} label: {
Text("Activate first sheet")
}
Button {
someArgument = "Show this text"
activeSheet = .second
} label: {
Text("Activate second sheet")
}
}
.sheet(item: $activeSheet) { item in
switch item {
case .first:
FirstView()
case .second:
SecondView(message: someArgument!)
}
}
}
}
struct FirstView: View {
var body: some View {
Text("Hello I'm 1")
}
}
struct SecondView: View {
let message: String
var body: some View {
Text(message)
}
}
我想这不是很直接的原因是导航链接通常用于这种用例。一种可能的修复方法是将参数字符串作为
ActiveSheet
enum的关联值传递。这样,它将在初始化枚举的同时可用:
enum ActiveSheet: Identifiable, Hashable {
case first
case second(String)
var id: Int { hashValue }
}
struct ContentView: View {
@State var activeSheet: ActiveSheet?
var body: some View {
VStack {
Button {
activeSheet = .first
} label: {
Text("Activate first sheet")
}
Button {
activeSheet = .second("Show this text")
} label: {
Text("Activate second sheet")
}
}
.sheet(item: $activeSheet) { item in
switch item {
case .first:
FirstView()
case .second(let someArgument):
SecondView(message: someArgument)
}
}
}
}
struct FirstView: View {
var body: some View {
Text("Hello I'm 1")
}
}
struct SecondView: View {
let message: String
var body: some View {
Text(message)
}
}
一种可能的修复方法是将参数字符串作为
ActiveSheet
enum的关联值传递。这样,它将在初始化枚举的同时可用:
enum ActiveSheet: Identifiable, Hashable {
case first
case second(String)
var id: Int { hashValue }
}
struct ContentView: View {
@State var activeSheet: ActiveSheet?
var body: some View {
VStack {
Button {
activeSheet = .first
} label: {
Text("Activate first sheet")
}
Button {
activeSheet = .second("Show this text")
} label: {
Text("Activate second sheet")
}
}
.sheet(item: $activeSheet) { item in
switch item {
case .first:
FirstView()
case .second(let someArgument):
SecondView(message: someArgument)
}
}
}
}
struct FirstView: View {
var body: some View {
Text("Hello I'm 1")
}
}
struct SecondView: View {
let message: String
var body: some View {
Text(message)
}
}