Skip to content

Commit b550096

Browse files
committed
Fix the assert then using Data/Name in AnimatedImage
Should match the logic as URL, allows to set
1 parent 3333a12 commit b550096

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

Diff for: Example/SDWebImageSwiftUIDemo/AppDelegate.swift

+4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
import UIKit
1010
import SDWebImage
1111
import SDWebImageWebPCoder
12+
#if canImport(SDWebImageAVIFCoder)
1213
import SDWebImageAVIFCoder
14+
#endif
1315
import SDWebImageSVGCoder
1416
import SDWebImagePDFCoder
1517

@@ -22,7 +24,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
2224
// Override point for customization after application launch.
2325
// Add WebP/SVG/PDF support
2426
SDImageCodersManager.shared.addCoder(SDImageWebPCoder.shared)
27+
#if canImport(SDWebImageAVIFCoder)
2528
SDImageCodersManager.shared.addCoder(SDImageAVIFCoder.shared)
29+
#endif
2630
SDImageCodersManager.shared.addCoder(SDImageSVGCoder.shared)
2731
SDImageCodersManager.shared.addCoder(SDImagePDFCoder.shared)
2832
// Dynamic check to support vector format for both WebImage/AnimatedImage

Diff for: Example/SDWebImageSwiftUIDemo/ContentView.swift

+7
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ struct ContentView3: View {
3434
VStack {
3535
Text("\(animated ? "AnimatedImage" : "WebImage")")
3636
Spacer()
37+
#if os(watchOS)
38+
WebImage(url: url)
39+
.resizable()
40+
.scaledToFit()
41+
.frame(width: 100, height: 100)
42+
#else
3743
if animated {
3844
AnimatedImage(url: url)
3945
.resizable()
@@ -45,6 +51,7 @@ struct ContentView3: View {
4551
.scaledToFit()
4652
.frame(width: 100, height: 100)
4753
}
54+
#endif
4855
Button("Toggle \(isOn ? "nil" : "valid") URL") {
4956
isOn.toggle()
5057
}

Diff for: SDWebImageSwiftUI/Classes/AnimatedImage.swift

+16-9
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,10 @@ public struct AnimatedImage : PlatformViewRepresentable {
286286
return view
287287
}
288288

289-
private func updateViewForName(_ name: String, view: AnimatedImageViewWrapper, context: Context) {
289+
private func updateViewForName(_ name: String?, view: AnimatedImageViewWrapper, context: Context) {
290+
guard let name = name, name != context.coordinator.imageLoading.imageName else {
291+
return
292+
}
290293
var image: PlatformImage?
291294
#if os(macOS)
292295
image = SDAnimatedImage(named: name, in: imageModel.bundle)
@@ -306,7 +309,10 @@ public struct AnimatedImage : PlatformViewRepresentable {
306309
view.wrapped.image = image
307310
}
308311

309-
private func updateViewForData(_ data: Data, view: AnimatedImageViewWrapper, context: Context) {
312+
private func updateViewForData(_ data: Data?, view: AnimatedImageViewWrapper, context: Context) {
313+
guard let data = data, data != context.coordinator.imageLoading.imageData else {
314+
return
315+
}
310316
var image: PlatformImage? = SDAnimatedImage(data: data, scale: imageModel.scale)
311317
if image == nil {
312318
// For static image, use UIImage as defaults
@@ -344,14 +350,15 @@ public struct AnimatedImage : PlatformViewRepresentable {
344350
// Refresh image, imageModel is the Source of Truth, switch the type
345351
// Although we have Source of Truth, we can check the previous value, to avoid re-generate SDAnimatedImage, which is performance-cost.
346352
let kind = imageModel.kind
347-
if kind == .name, let name = imageModel.name, name != context.coordinator.imageLoading.imageName {
348-
updateViewForName(name, view: view, context: context)
349-
} else if kind == .data, let data = imageModel.data, data != context.coordinator.imageLoading.imageData {
350-
updateViewForData(data, view: view, context: context)
351-
} else if kind == .url {
353+
switch kind {
354+
case .name:
355+
updateViewForName(imageModel.name, view: view, context: context)
356+
case .data:
357+
updateViewForData(imageModel.data, view: view, context: context)
358+
case .url:
352359
updateViewForURL(imageModel.url, view: view, context: context)
353-
} else {
354-
fatalError("Unsupported model kind: \(kind)")
360+
case .unknown:
361+
break // impossible
355362
}
356363

357364
#if os(macOS)

0 commit comments

Comments
 (0)