[Video Summary] Ch. 3.3 PhotosPicker in SwiftUI BipTheGuy app
Mô tả nhanh
Video này hướng dẫn cách sử dụng PhotosPicker trong SwiftUI để người dùng có thể chọn ảnh từ thư viện ảnh của họ trong ứng dụng BipTheGuy. Video cũng trình bày cách chuyển đổi một PhotosPickerItem thành một Image trong SwiftUI, sử dụng loadTransferable, xử lý bất đồng bộ với async và await, và cách sử dụng try và try?.
Video
Mô tả chi tiết
Video này hướng dẫn cách sử dụng PhotosPicker trong SwiftUI để người dùng có thể chọn ảnh từ thư viện ảnh của họ trong ứng dụng BipTheGuy. Video cũng trình bày cách chuyển đổi một PhotosPickerItem thành một Image trong SwiftUI, sử dụng loadTransferable, xử lý bất đồng bộ với async và await, và cách sử dụng try và try?.
Các bước chính trong video bao gồm:
- Import PhotosUI: Vì PhotosPicker không thuộc core của SwiftUI, cần phải import PhotosUI.
- Khai báo biến state selectedPhoto: Biến này kiểuPhotosPickerItem?để lưu trữ item ảnh được chọn (có thể là nil nếu không có ảnh nào được chọn).
- Thay thế Button bằng PhotosPicker: Thay vì dùng Buttonđể chọn ảnh như trước, ta dùngPhotosPickerview.- PhotosPickercó tham số- selectionđể ràng buộc với biến- selectedPhoto.
- Label của Buttoncũ được tái sử dụng trong PhotosPicker.
 
- Tùy chỉnh PhotosPicker:
- matching: .images: Lọc chỉ hiển thị ảnh trong thư viện.
- preferredEncoding: .automaticđể iOS tự chọn encoding phù hợp
 
- Sử dụng Modifier onChange: Khi người dùng chọn ảnh, modifier này sẽ được kích hoạt và thực hiện các bước sau:- Chuyển đổi PhotosPickerItemthànhData: Sử dụngloadTransferable(type: Data.self)để lấy data từPhotoPickerItem. Hàm này cầnawaitvì nó là hàm bất đồng bộ (async). Cần đặt trongTask {}để thực hiện bất đồng bộ.
- Chuyển đổi DatathànhUIImage: Sử dụngUIImage(data:)để chuyển data thành UIImage.
- Chuyển đổi UIImagethànhImagetrong SwiftUI: Tạo một biến@State private var bipImage = Image("clown")để lưu trữImage. Sau đó dùngbipImage = Image(uiImage:)để hiển thị ảnh.
 
- Chuyển đổi 
- Xử lý lỗi: Có 3 cách xử lý lỗi khi loadTransferablecó thể throw error:- Sử dụng do-try-catch: đây là cách đầy đủ, có thể bắt và xử lý error.
- Sử dụng try?: bỏ qua error, nếu error sẽ trả về nil. Có thể dùngguard letđể xử lý trường hợp nil.
- Sử dụng if letvớitry: tương tự nhưtry?, có thể bỏ qua việc xử lý lỗi.
 
- Sử dụng 
- Lưu ý về "Magenta Bush": Cảnh báo về một bức ảnh "magenta bush" trong thư viện ảnh simulator có thể gây lỗi không xác định.
Video kết thúc bằng việc thử nghiệm ứng dụng trên simulator, thêm ảnh vào simulator, và minh họa lại lỗi với 'Magenta Bush'.
Chúc bạn một ngày làm việc hiệu quả!
