我有一个RealmSwift应用程序,我正在摆弄,并且在选择任何对象值时遇到了麻烦。
基本对象:
class Event: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var short_description: String = ""
@Persisted var long_description: String = ""
@Persisted var created_by: String = ""
@Persisted var created_by_email: String? = ""
@Persisted var created_date: Date = Date()
@Persisted var event_type: EventType?
}
class EventType: Object, ObjectKeyIdentifiable {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var name: String
@Persisted var type_description: String
}
在尝试创建一个新的Event时,Picker显示的很好,为集合中的每个条目提供值,但是,它不允许我选择任何EventType。
struct CreateEventView: View {
@ObservedResults(Event.self) var events
@ObservedResults(EventType.self) var eventTypes
@State private var newEvent = Event()
@Binding var isInCreateEventView: Bool
@State var user: User
@State var short_description = ""
@State var long_description = ""
@State var selected_event_type: ObjectId?
var body: some View {
Form {
Section(header: Text("New Event Details")) {
TextField("Short Description", text: $short_description)
Picker("Event Type", selection: $selected_event_type) {
Text("Select Event Type").tag(ObjectId?.none)
ForEach(eventTypes) { eventType in
Text(eventType.name).tag(eventType._id)
}
}
Text("Selected Event Type: \(selected_event_type != nil ? String(describing: selected_event_type!) : "No Selected Event Type")")
TextField("Long Description", text: $long_description)
}
Section {
Button(action: {
newEvent.created_by = user.id
newEvent.created_by_email = user.profile.email
newEvent.short_description = short_description
newEvent.event_type = eventTypes.first(where: { $0._id == selected_event_type })
newEvent.long_description = long_description
newEvent.created_date = Date()
$events.append(newEvent)
isInCreateEventView = false
}) {
HStack {
Spacer()
Text("Save")
Spacer()
}
}
Button(action: {
print(eventTypes)
isInCreateEventView = false
}) {
HStack {
Spacer()
Text("Cancel")
Spacer()
}
}
}
}
.navigationBarTitle("Add Event")
}
}
我已经把头撞在这上面好几天了,不能让事情正常运转。任何帮助将不胜感激。选择器可以很好地显示值,但是当我点击任何弹出的值时,它只会返回默认的“无”选择。
1条答案
按热度按时间py49o6xq1#
我想,我刚问完,就想到了一个有效的解决方案。我将变量声明调整为:
将拾取器元素修改为:
和事件对象的赋值如下: