Avatar
明示的なActorの指定が無い関数に関しては実行されるスレッドはコンパイラの気持ち次第なので、基本的に保証されないと考えるほうが安全だと思います。
🙇‍♂️ 1
4:54 PM
Objective-Cのメソッドに対して明示的なActorを付ける方法としてこういう書き方があります。 #define MAIN_ACTOR __attribute__((__swift_attr__("@MainActor"))) @interface MyClass : NSObject - (void)callbackWithCompletion:(void (^)(void))completion MAIN_ACTOR; @end
t_naruhodo 1
4:55 PM
ただ、これは若干ClangImporterが怪しくて、completionの自動async化と組み合わせたときにActorの指定が無視されてそうな動きをしています。
4:58 PM
なので、恒久的に挙動を保証する場合、@MainActor な関数の下でacquireToken をコールバックを取る同期関数として呼び出す書き方であれば意味を漏れなく記述できると思います。
👍 1