I have a Department
struct on the User
object as an optional field.
Department
struct Department: Identifiable, Codable {
var id: Int
var name: String?
init(id: Int, name: String? = nil) {
self.id = id
self.name = name
}
}
extension Department: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
extension Department: Equatable {
static func == (lhs: Department, rhs: Department) -> Bool {
return lhs.id == rhs.id
}
}
User
Mnimallist example, user has other fields but omitted for example.
User object with an optional field of the Department
struct User: Identifiable, Codable {
var id: Int
var department: Department?
init(id: Int, department:Department? = nil) {
self.id = id
self.department = department
}
}
extension User: Hashable {
func hash(into hasher: inout Hasher) {
hasher.combine(id)
}
}
ViewModel
class ViewModel: ObservableObject {
@Published var user: User = User(id: 0)
@Published var departments: [Department] = [Department(id: 0, name: "--None Selected--")]
....
View
Picker(selection: $viewModel.user.department, label: Text("")) {
ForEach(viewModel.departments, id: \.id) { department in
Text(department.name ?? "").tag(department)
}
}
.pickerStyle(WheelPickerStyle())
.padding()