DEV Community

Liang Wang
Liang Wang

Posted on

defer

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.