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

Merge pull request #1925 from PJ-LT/placeholder-on-error-fix

Error image with custom Placeholder fix
Wei Wang 3 лет назад
Родитель
Сommit
84bf4f2820

+ 1 - 0
Sources/Extensions/ImageView+Kingfisher.swift

@@ -360,6 +360,7 @@ extension KingfisherWrapper where Base: KFCrossPlatformImageView {
 
 
                     case .failure:
                     case .failure:
                         if let image = options.onFailureImage {
                         if let image = options.onFailureImage {
+                            mutatingSelf.placeholder = nil
                             self.base.image = image
                             self.base.image = image
                         }
                         }
                         completionHandler?(result)
                         completionHandler?(result)

+ 5 - 0
Sources/SwiftUI/ImageBinder.swift

@@ -54,6 +54,11 @@ extension KFImage {
             guard let source = context.source else {
             guard let source = context.source else {
                 CallbackQueue.mainCurrentOrAsync.execute {
                 CallbackQueue.mainCurrentOrAsync.execute {
                     context.onFailureDelegate.call(KingfisherError.imageSettingError(reason: .emptySource))
                     context.onFailureDelegate.call(KingfisherError.imageSettingError(reason: .emptySource))
+                    if let image = context.options.onFailureImage {
+                        self.loadedImage = image
+                    }
+                    self.loading = false
+                    self.loaded = true
                 }
                 }
                 return
                 return
             }
             }

+ 22 - 0
Tests/KingfisherTests/ImageViewExtensionTests.swift

@@ -569,6 +569,28 @@ class ImageViewExtensionTests: XCTestCase {
 
 
         waitForExpectations(timeout: 3, handler: nil)
         waitForExpectations(timeout: 3, handler: nil)
     }
     }
+
+    func testSettingNonWorkingImageWithCustomizePlaceholderAndFailureImage() {
+        let exp = expectation(description: #function)
+        let url = testURLs[0]
+
+        stub(url, errorCode: 404)
+
+        let view = KFCrossPlatformView()
+
+        imageView.kf.setImage(
+            with: url,
+            placeholder: view,
+            options: [.onFailureImage(testImage)])
+        {
+            result in
+            XCTAssertEqual(self.imageView.image, testImage)
+            XCTAssertFalse(self.imageView.subviews.contains(view))
+            exp.fulfill()
+        }
+
+        waitForExpectations(timeout: 3, handler: nil)
+    }
     
     
     func testSettingNonWorkingImageWithFailureImage() {
     func testSettingNonWorkingImageWithFailureImage() {
         let exp = expectation(description: #function)
         let exp = expectation(description: #function)