6️⃣

事例別!Strict Concurrency対応方法

に公開
5

Discussion

Yuta KoshizawaYuta Koshizawa

deinit の例は、 nonSendableObserverFoo インスタンスの内部からのみの利用で安全であれば( MainActor isolatedなメソッドと deinit からのみのアクセスであれば、メソッド同士は排他的だし deinit が呼ばれるときにインスタンスメソッドが呼ばれていることはないので、同時にアクセスされることはないので)、 nonisolated(unsafe) にするのはどうでしょう?

matsujimatsuji

コメントありがとうございます!
actorの中でnonisolatedを書くことも多くはないでしょうし、シンプルで良い方法に思いました。
そのアイデアを追加させていただきました。ありがとうございました!
nonisolated(unsafe)を付け足す

uhooiuhooi

素晴らしい記事をありがとうございます…!

しかし、場合によってはどうしてもactorにできない場合があります。

こちらの記述が気になったのですが、 actor にできない場合はあるのでしょうか?
「したくない」場合はあると思うのですが、「できない」場合があるのかわからなかったので気になりました…!

matsujimatsuji

コメントありがとうございます。
考えられるケースとしてはいくつかありますが、一番現実的なケースだと呼び出し箇所が多すぎる場合です。
actorにすると、呼び出し箇所でSwift Concurrencyを使うことが強制されます。
新規プロジェクトなら問題にならないかもしれませんが、すでにリリースされている大規模なアプリだと、まだまだSwift Concurrencyが使えないコードも多いと思います。そういう場合actorにできないと思います。(技術的には可能ですが、現実的には不可能な場合という意味です。)

uhooiuhooi

なるほど、それなら納得です…!
ありがとうございます🙏✨