Просмотр исходного кода

Use callback queue to ensure main thread

onevcat 5 лет назад
Родитель
Сommit
378e012b8a
1 измененных файлов с 6 добавлено и 4 удалено
  1. 6 4
      Sources/SwiftUI/ImageBinder.swift

+ 6 - 4
Sources/SwiftUI/ImageBinder.swift

@@ -67,7 +67,7 @@ extension KFImage {
             loadingOrSucceeded = 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.loadingOrSucceeded = false
                             self.loadingOrSucceeded = false
-                            DispatchQueue.main.async {
+                            CallbackQueue.mainCurrentOrAsync.execute {
                                 self.onFailureDelegate.call(error)
                                 self.onFailureDelegate.call(error)
                             }
                             }
                         }
                         }