SwiftUI 中可观察 class 中可选数据类型的选择器?
Picker for optional data type in observable class in SwiftUI?
我遇到了与 Picker for optional data type in SwiftUI? 非常相似的问题。
不同之处在于,我在可观察的 class 中引用了一个可选项。
我的代码如下:
enum Flavor: String, CaseIterable, Identifiable {
case chocolate
case vanilla
case strawberry
var id: String { self.rawValue }
}
class cl1: ObservableObject {
@Published var fl: Flavor?
}
struct ContentView: View {
@State private var selectedFlavor: cl1 = cl1()
var body: some View {
Picker("Flavor", selection: $selectedFlavor.fl) {
Text("Chocolate").tag(Flavor.chocolate as Flavor?)
Text("Vanilla").tag(Flavor.vanilla as Flavor?)
Text("Strawberry").tag(Flavor.strawberry as Flavor?)
}
.padding()
}
}
尽管我遵循了其他答案,但一旦我使用 class 对象,它就会失败。
我需要更改什么才能使其正常工作?
当使用 ObservableObject
时,您应该使用 @StateObject
属性 包装器而不是 @State
-- 这将允许您的 View
观看ObservableObject
的 @Published
属性更新
@StateObject private var selectedFlavor: cl1 = cl1()
我遇到了与 Picker for optional data type in SwiftUI? 非常相似的问题。
不同之处在于,我在可观察的 class 中引用了一个可选项。
我的代码如下:
enum Flavor: String, CaseIterable, Identifiable {
case chocolate
case vanilla
case strawberry
var id: String { self.rawValue }
}
class cl1: ObservableObject {
@Published var fl: Flavor?
}
struct ContentView: View {
@State private var selectedFlavor: cl1 = cl1()
var body: some View {
Picker("Flavor", selection: $selectedFlavor.fl) {
Text("Chocolate").tag(Flavor.chocolate as Flavor?)
Text("Vanilla").tag(Flavor.vanilla as Flavor?)
Text("Strawberry").tag(Flavor.strawberry as Flavor?)
}
.padding()
}
}
尽管我遵循了其他答案,但一旦我使用 class 对象,它就会失败。
我需要更改什么才能使其正常工作?
当使用 ObservableObject
时,您应该使用 @StateObject
属性 包装器而不是 @State
-- 这将允许您的 View
观看ObservableObject
@Published
属性更新
@StateObject private var selectedFlavor: cl1 = cl1()