import SwiftUI struct Media: Identifiable { var id = UUID() var image: Image } struct ContentView: View { @State var itemProviders: [NSItemProvider] = [] @State private var showingPhotoPicker: Bool = false let columns = [ GridItem(.adaptive(minimum: 100, maximum: 100), spacing: 8) ] @State var medias: [Media] = [] var body: some View { NavigationView { ScrollView { LazyVGrid(columns: columns, spacing: 8) { ForEach(medias) { media in media.image .resizable() .scaledToFill() .frame(width: 100, height: 100, alignment: .center) .clipped() } } } .navigationBarTitle("Images \(medias.count)") .navigationBarItems(leading: Button(action: { loadImages() }, label: { Text("Import \(itemProviders.count) images") }), trailing: Button(action: { showingPhotoPicker.toggle() }, label: { Image(systemName: "photo.on.rectangle.angled") })) .sheet(isPresented: $showingPhotoPicker) { MultiPHPickerView(itemProviders: $itemProviders) } } } func loadImages() { for item in itemProviders { if item.canLoadObject(ofClass: UIImage.self) { item.loadObject(ofClass: UIImage.self) { image, error in DispatchQueue.main.async { guard let image = image as? UIImage else { return } medias.append(Media(image: Image(uiImage: image))) } } } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }