When trying to call a method on a class marked as running on the MainActor from within a background DispatchQueue, I correctly get a compiler error, which goes away when calling it from DispatchQueu.main.async { … }. Also fine and expected.
But what is the mechanism that allows the compiler to diagnose this?
I just skimmed the API diffs for DispatchQueue, and so didn’t spot anything related to the MainActor.
Would something similar be implemented for third party libraries like RxSwift?
benlings
(Ben Lings)
2
I'm sure I either read something about this on the forums or saw it in a WWDC session, but now can't find it. I took a look through the compiler source and found this:
https://github.com/apple/swift/commit/b68f8555b31cd8dd242a6a70b2fc6c5ea014cae5
Looks like DispatchQueue.main.async is special-cased to infer that it is @MainActor.
2 Likes