I'm attempting to store a name and image data into a struct of people for the Day 77 milestone project, and getting an error stating:
Value of optional type 'Data?' must be unwrapped to a value of type 'Data'
I'm sure I'm missing something obvious, but can't seem to put my brain on exacty why I can't load the UIImage data into the "people" array from the viewModel.
Thanks for any pointers!
The Struct is as follows:
struct SpecificPerson: Identifiable {
var id = UUID()
var name: String
var image: Data?
init(id: UUID, name: String, image: Data) {
self.id = id
self.name = name
self.image = image
}
}
The AddPersonView is:
struct AddPersonView: View {
@Environment(\.dismiss) var dismiss
@State private var pickerItem: PhotosPickerItem?
@State private var selectedImage: Image?
@State private var uiSelectedImage: Data?
@State private var selectedImageName: String = ""
@Bindable var viewModel: PeopleViewModel
var body: some View {
VStack {
if let selectedImage {
selectedImage
.resizable()
.scaledToFit()
Text("Please enter a name for this person:")
.padding()
TextField("Enter Name", text: $selectedImageName)
.textFieldStyle(.roundedBorder)
.padding(.horizontal)
Button("Save") {
let personToAdd = SpecificPerson(id: UUID(), name: selectedImageName, image: uiSelectedImage)
viewModel.people.append(personToAdd)
dismiss()
}
} else {
PhotosPicker("Select a Photo", selection: $pickerItem, matching: .images)
}
}
.padding()
.onChange(of: pickerItem) {
Task {
if let data = try await pickerItem?.loadTransferable(type: Data.self) {
uiSelectedImage = data
}
}
}
}
}
And the viewModel:
@Observable
class PeopleViewModel {
var people = [SpecificPerson]()
}