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

private、weak修饰、提供getter

Jack 5 лет назад
Родитель
Сommit
d0c2e5cf64

+ 3 - 2
Sources/Networking/ImageDownloader.swift

@@ -166,8 +166,9 @@ open class ImageDownloader {
     }
     
     /// You could set the extra handler before a downloading task starts.
-    public func addExtraSessionDelegateHandler(_ handler: URLSessionDataDelegate) {
-        sessionDelegate.extraHandler = handler
+    public weak var extraSessionDelegateHandler:URLSessionDataDelegate? {
+        set {sessionDelegate.setExtraHandler(newValue)}
+        get {return sessionDelegate.getExtraHandler()}
     }
     
     deinit { session.invalidateAndCancel() }

+ 10 - 1
Sources/Networking/SessionDelegate.swift

@@ -45,7 +45,7 @@ class SessionDelegate: NSObject {
 
     private var tasks: [URL: SessionDataTask] = [:]
     private let lock = NSLock()
-    public var extraHandler: URLSessionDataDelegate?
+    private weak var extraHandler: URLSessionDataDelegate?
 
     let onValidStatusCode = Delegate<Int, Bool>()
     let onDownloadingFinished = Delegate<(URL, Result<URLResponse, KingfisherError>), Void>()
@@ -146,6 +146,15 @@ class SessionDelegate: NSObject {
         lock.unlock()
         task?.forceCancel()
     }
+    
+    /// You could set the extra handler before a downloading task starts.
+    func setExtraHandler(_ handler: URLSessionDataDelegate?) {
+        extraHandler = handler
+    }
+    func getExtraHandler() -> URLSessionDataDelegate? {
+        return extraHandler
+    }
+    
 }
 
 extension SessionDelegate: URLSessionDataDelegate {

+ 1 - 2
Tests/KingfisherTests/ImageDownloaderTests.swift

@@ -552,8 +552,7 @@ class ImageDownloaderTests: XCTestCase {
     func testExtraSessionDelegateHandler() {
         expectation = expectation(description: #function)
        
-        downloader.addExtraSessionDelegateHandler(self)
-       
+        downloader.extraSessionDelegateHandler = self
         let url = testURLs[0]
         stub(url, data: testImageData)