Bladeren bron

Merge pull request #1551 from onevcat/fix/swift-ui-callback

Fix swift ui callback
Wei Wang 5 jaren geleden
bovenliggende
commit
cccc9cd331
2 gewijzigde bestanden met toevoegingen van 11 en 9 verwijderingen
  1. 10 8
      Sources/SwiftUI/ImageBinder.swift
  2. 1 1
      Sources/SwiftUI/KFImage.swift

+ 10 - 8
Sources/SwiftUI/ImageBinder.swift

@@ -43,7 +43,7 @@ extension KFImage {
 
 
         var downloadTask: DownloadTask?
         var downloadTask: DownloadTask?
 
 
-        var loadingOrSuccessed: Bool = false
+        var loadingOrSucceeded: Bool = false
 
 
         let onFailureDelegate = Delegate<KingfisherError, Void>()
         let onFailureDelegate = Delegate<KingfisherError, Void>()
         let onSuccessDelegate = Delegate<RetrieveImageResult, Void>()
         let onSuccessDelegate = Delegate<RetrieveImageResult, Void>()
@@ -62,12 +62,12 @@ extension KFImage {
 
 
         func start() {
         func start() {
 
 
-            guard !loadingOrSuccessed else { return }
+            guard !loadingOrSucceeded else { return }
 
 
-            loadingOrSuccessed = true
+            loadingOrSucceeded = true
 
 
             guard let source = source else {
             guard let source = source else {
-                DispatchQueue.main.async {
+                CallbackQueue.mainCurrentOrAsync.execute {
                     self.onFailureDelegate.call(KingfisherError.imageSettingError(reason: .emptySource))
                     self.onFailureDelegate.call(KingfisherError.imageSettingError(reason: .emptySource))
                 }
                 }
                 return
                 return
@@ -93,14 +93,16 @@ extension KFImage {
                             // a `UIImage`)
                             // a `UIImage`)
                             // https://github.com/onevcat/Kingfisher/issues/1395
                             // https://github.com/onevcat/Kingfisher/issues/1395
                             let image = value.image.kf.normalized
                             let image = value.image.kf.normalized
-                            DispatchQueue.main.async {
-                                self.image = image
+                            CallbackQueue.mainAsync.execute {
                                 self.isLoaded.wrappedValue = true
                                 self.isLoaded.wrappedValue = true
+                            }
+                            CallbackQueue.mainCurrentOrAsync.execute {
+                                self.image = image
                                 self.onSuccessDelegate.call(value)
                                 self.onSuccessDelegate.call(value)
                             }
                             }
                         case .failure(let error):
                         case .failure(let error):
-                            self.loadingOrSuccessed = false
-                            DispatchQueue.main.async {
+                            self.loadingOrSucceeded = false
+                            CallbackQueue.mainCurrentOrAsync.execute {
                                 self.onFailureDelegate.call(error)
                                 self.onFailureDelegate.call(error)
                             }
                             }
                         }
                         }

+ 1 - 1
Sources/SwiftUI/KFImage.swift

@@ -105,7 +105,7 @@ public struct KFImage: SwiftUI.View {
                     guard let binder = binder else {
                     guard let binder = binder else {
                         return
                         return
                     }
                     }
-                    if !binder.loadingOrSuccessed {
+                    if !binder.loadingOrSucceeded {
                         binder.start()
                         binder.start()
                     }
                     }
                 }
                 }