[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ùngPhotosPicker
view.PhotosPicker
có tham sốselection
để ràng buộc với biếnselectedPhoto
.- Label của
Button
cũ đượ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
PhotosPickerItem
thànhData
: Sử dụngloadTransferable(type: Data.self)
để lấy data từPhotoPickerItem
. Hàm này cầnawait
vì nó là hàm bất đồng bộ (async). Cần đặt trongTask {}
để thực hiện bất đồng bộ. - Chuyển đổi
Data
thànhUIImage
: Sử dụngUIImage(data:)
để chuyển data thành UIImage. - Chuyển đổi
UIImage
thànhImage
trong 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
loadTransferable
có 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 let
vớ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ả!