Преглед изворни кода

Fix compiling issue for Xcode 15.2

onevcat пре 1 година
родитељ
комит
553477cefd
1 измењених фајлова са 15 додато и 1 уклоњено
  1. 15 1
      Sources/Utility/CallbackQueue.swift

+ 15 - 1
Sources/Utility/CallbackQueue.swift

@@ -72,7 +72,7 @@ public enum CallbackQueue: Sendable {
 enum CallbackQueueMain {
     static func currentOrAsync(_ block: @MainActor @Sendable @escaping () -> Void) {
         if Thread.isMainThread {
-            MainActor.assumeIsolated { block() }
+            MainActor.runUnsafely { block() }
         } else {
             DispatchQueue.main.async { block() }
         }
@@ -82,3 +82,17 @@ enum CallbackQueueMain {
         DispatchQueue.main.async { block() }
     }
 }
+
+extension MainActor {
+    @_unavailableFromAsync
+    static func runUnsafely<T>(_ body: @MainActor () throws -> T) rethrows -> T {
+#if swift(>=5.10)
+        return try MainActor.assumeIsolated(body)
+#else
+        dispatchPrecondition(condition: .onQueue(.main))
+        return try withoutActuallyEscaping(body) { fn in
+            try unsafeBitCast(fn, to: (() throws -> T).self)()
+        }
+#endif
+    }
+}