I am using photoPicker to select an image from photo library, and before using defer, my code looks like this
PhotosPicker(selection: $selectedItem, matching: .images) {
Label("Select an image", systemImage: "photo")
}
.onChange(of: selectedItem) { _, newValue in
isLoadingImage = true
Task {
if let data = try? await newValue?.loadTransferable(type: Data.self) {
selectedImageData = data
if let selectedImageData, let uiImage = UIImage(data: selectedImageData) {
inputImage = uiImage
}
}
isLoadingImage = false
} //: Task
} //: onChange
After using defer and change try? to do { try } catch { }, my code now looks like this
PhotosPicker(selection: $selectedItem, matching: .images) {
Label("Select an image", systemImage: "photo")
}
.onChange(of: selectedItem) { _, newValue in
Task {
isLoadingImage = true
defer { isLoadingImage = false }
do {
if let data = try await newValue?.loadTransferable(type: Data.self) {
selectedImageData = data
if let selectedImageData, let uiImage = UIImage(data: selectedImageData) {
inputImage = uiImage
}
}
} catch {
print("Failed to load image: \(error.localizedDescription)")
}
} //: Task
} //: onChange
Top comments (0)
Some comments may only be visible to logged-in visitors. Sign in to view all comments.