@@ -195,33 +195,37 @@ public struct CachedAsyncImage<Content>: View where Content: View {
195195 public init ( url: URL ? , urlCache: URLCache = . shared, scale: CGFloat = 1 , transaction: Transaction = Transaction ( ) , @ViewBuilder content: @escaping ( AsyncImagePhase ) -> Content ) {
196196 let configuration = URLSessionConfiguration . default
197197 configuration. urlCache = urlCache
198- configuration. requestCachePolicy = . reloadIgnoringLocalCacheData
198+ configuration. requestCachePolicy = . returnCacheDataElseLoad
199199 self . url = url
200200 self . urlSession = URLSession ( configuration: configuration)
201201 self . scale = scale
202202 self . transaction = transaction
203203 self . content = content
204+ loadFromCache ( url: url)
204205 }
205206
206207 private func load( url: URL ? ) async {
207208 guard let url = url else { return }
208209 let request = URLRequest ( url: url)
209- let cachedData : Data ?
210- let animation : Animation ?
211- if let cachedResponse = urlSession. configuration. urlCache? . cachedResponse ( for: request) {
212- cachedData = cachedResponse. data
213- animation = nil
214- } else {
215- cachedData = nil
216- animation = transaction. animation
217- }
218210 do {
219- let data : Data
220- if let cachedData = cachedData {
221- data = cachedData
222- } else {
223- ( data , _ ) = try await urlSession . data ( for : request )
211+ let ( data, _ ) = try await urlSession . data ( for : request )
212+ process ( data : data , animation : transaction . animation )
213+ } catch {
214+ withAnimation ( transaction . animation ) {
215+ phase = . failure ( error )
224216 }
217+ }
218+ }
219+
220+ private func loadFromCache( url: URL ? ) {
221+ guard let url = url else { return }
222+ let request = URLRequest ( url: url)
223+ guard let cachedResponse = urlSession. configuration. urlCache? . cachedResponse ( for: request) else { return }
224+ process ( data: cachedResponse. data)
225+ }
226+
227+ private func process( data: Data , animation: Animation ? = nil ) {
228+ do {
225229#if os(macOS)
226230 if let nsImage = NSImage ( data: data) {
227231 let image = Image ( nsImage: nsImage)
0 commit comments