Pārlūkot izejas kodu

Fix Swift 6 concurrency warnings

onevcat 1 mēnesi atpakaļ
vecāks
revīzija
c555856ddf

+ 1 - 1
Sources/Cache/ImageCache.swift

@@ -885,7 +885,7 @@ open class ImageCache: @unchecked Sendable {
 
         let taskState = BackgroundTaskState()
 
-        let endBackgroundTaskIfNeeded: @MainActor @Sendable () -> Void = {
+        let endBackgroundTaskIfNeeded: @Sendable () -> Void = {
             Task { @MainActor in
                 guard let bgTask = await taskState.takeValidValueAndInvalidate() else { return }
                 guard let sharedApplication = KingfisherWrapper<UIApplication>.shared else { return }

+ 21 - 8
Tests/KingfisherTests/ImageDownloaderTests.swift

@@ -681,8 +681,25 @@ class ImageDownloaderTests: XCTestCase {
         let url = testURLs[0]
         stub(url, data: testImageData)
 
-        let callbackLock = NSLock()
-        var callbackCount = 0
+        final class CallbackCounter: @unchecked Sendable {
+            private let lock = NSLock()
+            private var value = 0
+
+            func increment() {
+                lock.lock()
+                value += 1
+                lock.unlock()
+            }
+
+            func read() -> Int {
+                lock.lock()
+                let current = value
+                lock.unlock()
+                return current
+            }
+        }
+
+        let callbackCounter = CallbackCounter()
         let expectedCount = 10
         exp.expectedFulfillmentCount = expectedCount
 
@@ -695,9 +712,7 @@ class ImageDownloaderTests: XCTestCase {
                     XCTAssertEqual(imageResult.url, url)
                     XCTAssertEqual(imageResult.originalData, testImageData)
 
-                    callbackLock.lock()
-                    callbackCount += 1
-                    callbackLock.unlock()
+                    callbackCounter.increment()
 
                     exp.fulfill()
 
@@ -710,9 +725,7 @@ class ImageDownloaderTests: XCTestCase {
 
         // Then
         waitForExpectations(timeout: 3) { _ in
-            callbackLock.lock()
-            let finalCount = callbackCount
-            callbackLock.unlock()
+            let finalCount = callbackCounter.read()
             XCTAssertEqual(finalCount, expectedCount, "All \(expectedCount) concurrent requests should receive callbacks")
         }
     }