Last active
June 17, 2024 16:47
-
-
Save siracusa/137e3fae8a384ac4bda8c56524826d6b to your computer and use it in GitHub Desktop.
Swift Concurrency Candidate
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
NSWorkspace.shared.notificationCenter.addObserver( | |
forName: NSWorkspace.didLaunchApplicationNotification, | |
object: nil, queue: nil, using: { [weak self] notification in | |
self?.doStuff() | |
}) |
Perfect, thanks for the bitcast hack! And I'll look into the NS_SWIFT_UI_ACTOR
issue and file a bug if it's busted.
Also for anybody reading along: I think I decided I don't want/need the addMainActorObserver
to be @MainActor
. It's likely I'll only ever call it from the main thread, but because the method guarantees delivery on the main thread, it can be safely called from anywhere, I think.
I think this is correct! But, I also do want to point out that this version makes it possible to pass data unsafely across threads by way of the Notification
object. I don't think that's likely though.
Oh, right. That's a good point. Maybe I should leave it @MainActor
after all.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Oh well actually yes, you can achieve something similar in Swift:
I'm not sure exactly what's up with the
NS_SWIFT_UI_ACTOR
. I haven't looked into the clang annotations deeply but they are definitely supposed to work. Please file a bug if something isn't working as it should!