複数の画像をダウンロードできたものから表示
AsyncImage, placeholder, List, LazyVGrid, NavigationView, NavigationLink
ContentView.swift
struct Photo: Identifiable { var id: URL{url} var url: URL } class PhotoSource { var photos: [Photo] = [] init() { photos = makePhotos() } } extension PhotoSource { func makePhotos() -> [Photo] { let path = "https://oshige.xsrv.jp/samples/photos/" let photoNames: [String] = [ "IMG_1159.jpg", "IMG_1326.jpg", "IMG_1384.jpg", "IMG_1475.jpg", "IMG_1476.jpg", "IMG_1478.jpg", "IMG_1635.jpg", "IMG_1643.jpg", "IMG_1739.jpg", "IMG_1840.jpg", "IMG_1889.jpg", "IMG_2233.jpg", "IMG_2325.jpg", "IMG_2406.jpg", "IMG_2408.jpg", "IMG_4008.jpg" ] var photos: [Photo] = [] for name in photoNames { photos.append(Photo(url: URL(string: path + name)!)) } return photos } } struct ContentView: View { private var myPhotoSource = PhotoSource() var body: some View { NavigationView { List(myPhotoSource.photos) { photo in AsyncImage(url: photo.url) { image in image.resizable() .aspectRatio(contentMode: .fit) } placeholder: { Color.orange .overlay(Image(systemName: "photo").scaleEffect(2.0)) } .mask(RoundedRectangle(cornerRadius: 16)) .frame(height: 160) } .navigationTitle("お気に入り") } } }
なるほど、非同期というとJSって感じだが、Swiftでもあるのね。