【发布时间】:2021-11-17 17:53:42
【问题描述】:
我正在为这种奇怪的 Picker 行为而苦苦挣扎。基本上,当我点击选择器行时,我可以看到选项,但每次点击一行时,什么都没有发生。没有复选标记,没有回到上一个视图,也没有选择。我还尝试在ForEach 中添加id: \.self,但没有任何变化。我正在使用带有 Xcode 13 的 iOS 15,但问题也存在于 iOS 14 和 Xcode 12.x 上。
这是我的观点的代码:
@State private var month: Month?
@State private var category: Category?
var body: some View {
NavigationView {
VStack {
Form {
Section {
Picker(month?.name ?? "Seleziona il mese", selection: $month) {
ForEach(model.months) { month in
Text(month.name).tag(month)
}
}
Picker(category?.name ?? "Seleziona la categoria", selection: $category) {
ForEach(model.categories) { category in
Text(category.name).tag(category)
}
}
}
}
Spacer()
}
.navigationTitle("Aggiungi Spesa")
}
}
这里是Month的代码(Category基本一样):
class Month: Decodable, AirtableRecord, Identifiable {
var id: String
var createdTime: String
var number: Int
var name: String
var completeName: String
init(
id: String,
createdTime: String,
number: Int,
name: String,
completeName: String) {
self.id = id
self.createdTime = createdTime
self.number = number
self.name = name
self.completeName = completeName
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(String.self, forKey: .id)
createdTime = try container.decode(String.self, forKey: .createdTime)
let fields = try container.nestedContainer(keyedBy: FieldsKeys.self, forKey: .fields)
name = try fields.decode(String.self, forKey: .name)
number = try fields.decode(Int.self, forKey: .number)
completeName = try fields.decode(String.self, forKey: .completeName)
}
enum CodingKeys: String, CodingKey {
case id
case createdTime
case fields
}
enum FieldsKeys: String, CodingKey {
case number = "Numero"
case name = "Nome"
case completeName = "Key"
}
}
extension Month: Equatable {
static func == (lhs: Month, rhs: Month) -> Bool {
return lhs.id == rhs.id
}
}
extension Month: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
extension Month: CustomStringConvertible {
var description: String {
return "\(completeName)"
}
}
【问题讨论】:
-
我们无法用所提供的信息真正回答您的问题。您没有说明您认为是不正确的行为,也没有提供有人可以构建以查看您所看到的代码。请参阅:How do I ask a good question? 和 How to create a Minimal, Reproducible Example。
-
@Yrb 对不起,我忘了添加为什么行为奇怪的细节。我刚刚编辑了问题。
-
你仍然没有一个最小的、可重现的例子。没有人可以运行您的代码来尝试修复它。