Skip to content

Commit 2935e2b

Browse files
committed
Code garden with Xcode 12's if let syntax in function builder
1 parent d17d44e commit 2935e2b

File tree

2 files changed

+33
-31
lines changed

2 files changed

+33
-31
lines changed

Diff for: SDWebImageSwiftUI/Classes/ImagePlayer.swift

+2-3
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ public final class ImagePlayer : ObservableObject {
7878
player?.clearFrameBuffer()
7979
}
8080

81-
/// Setup the player using Animated Image
81+
/// Setup the player using Animated Image.
82+
/// After setup, you can always check `isValid` status, or call `startPlaying` to play the animation.
8283
/// - Parameter image: animated image
8384
public func setupPlayer(animatedImage: SDAnimatedImageProvider) {
8485
if isValid {
@@ -104,8 +105,6 @@ public final class ImagePlayer : ObservableObject {
104105
imagePlayer.playbackMode = playbackMode
105106

106107
self.player = imagePlayer
107-
108-
imagePlayer.startPlaying()
109108
}
110109
}
111110
}

Diff for: SDWebImageSwiftUI/Classes/WebImage.swift

+31-28
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public struct WebImage : View {
1717
var placeholder: AnyView?
1818
var retryOnAppear: Bool = true
1919
var cancelOnDisappear: Bool = true
20+
var pausable: Bool = true
21+
var purgeable: Bool = false
2022

2123
@ObservedObject var imageManager: ImageManager
2224

@@ -26,9 +28,6 @@ public struct WebImage : View {
2628

2729
@ObservedObject var imagePlayer: ImagePlayer
2830

29-
var pausable: Bool = true
30-
var purgeable: Bool = false
31-
3231
/// Create a web image with url, placeholder, custom options and context.
3332
/// - Parameter url: The image url
3433
/// - Parameter options: The options to use when downloading the image. See `SDWebImageOptions` for the possible values.
@@ -61,35 +60,26 @@ public struct WebImage : View {
6160
imageManager.load()
6261
}
6362
return Group {
64-
if imageManager.image != nil {
63+
if let image = imageManager.image {
6564
if isAnimating && !imageManager.isIncremental {
66-
if imagePlayer.currentFrame != nil {
67-
configure(image: imagePlayer.currentFrame!)
68-
.onPlatformAppear(appear: {
69-
self.imagePlayer.startPlaying()
70-
}, disappear: {
71-
if self.pausable {
72-
self.imagePlayer.pausePlaying()
73-
} else {
74-
self.imagePlayer.stopPlaying()
75-
}
76-
if self.purgeable {
77-
self.imagePlayer.clearFrameBuffer()
78-
}
79-
})
80-
} else {
81-
configure(image: imageManager.image!)
82-
.onReceive(imageManager.$image) { image in
83-
if let animatedImage = image as? SDAnimatedImageProvider {
84-
self.imagePlayer.setupPlayer(animatedImage: animatedImage)
85-
}
65+
setupPlayer()
66+
.onPlatformAppear(appear: {
67+
self.imagePlayer.startPlaying()
68+
}, disappear: {
69+
if self.pausable {
70+
self.imagePlayer.pausePlaying()
71+
} else {
72+
self.imagePlayer.stopPlaying()
8673
}
87-
}
74+
if self.purgeable {
75+
self.imagePlayer.clearFrameBuffer()
76+
}
77+
})
8878
} else {
89-
if imagePlayer.currentFrame != nil {
90-
configure(image: imagePlayer.currentFrame!)
79+
if let currentFrame = imagePlayer.currentFrame {
80+
configure(image: currentFrame)
9181
} else {
92-
configure(image: imageManager.image!)
82+
configure(image: image)
9383
}
9484
}
9585
} else {
@@ -165,6 +155,19 @@ public struct WebImage : View {
165155
}
166156
}
167157

158+
/// Animated Image Support
159+
func setupPlayer() -> some View {
160+
if let currentFrame = imagePlayer.currentFrame {
161+
return configure(image: currentFrame)
162+
} else {
163+
if let animatedImage = imageManager.image as? SDAnimatedImageProvider {
164+
self.imagePlayer.setupPlayer(animatedImage: animatedImage)
165+
self.imagePlayer.startPlaying()
166+
}
167+
return configure(image: imageManager.image!)
168+
}
169+
}
170+
168171
/// Placeholder View Support
169172
func setupPlaceholder() -> some View {
170173
// Don't use `Group` because it will trigger `.onAppear` and `.onDisappear` when condition view removed, treat placeholder as an entire component

0 commit comments

Comments
 (0)