Closed16
Swift Concurrency全力キャッチアップする

- Actorがよくわからない

defer文がコンパイルエラーになることがある

正式なdocはここ

公式サンプルコード

ViewModelには @MainActor
をつけるのが良いとされている。
個人的には DispatchQueue.main.async { … }
で囲んでクラス書いてるみたいで、乱暴な感じがするけれど、実際これつけないと@MainActor
地獄になるので、
今のところつける方がいいかなって気がする

UIViewController
に @MainActor
は既についてるから、継承してるクラスはメインスレッドで全部動く認識だったが、
実際はなんか継承先にもつけないと、ワーニングが出る。これなんでなんだろ

Swift concurrency: Behind the scenes
今のところあんまりこの話はいいかな……

Swift concurrency: Update a sample app
これをちゃんと見ると良さそうだが長い……

async let
を使うことで、非同期処理に順序づけが可能。
逆にawaitスコープ同士は並列で動くので、順序が保証されない。

Actorは参照型らしい。
スコープが隔離されてるClassって認識でいいんかな

-
Task { … }
は隔離されたスレッドになる - クロージャー内に
@MainActor
をつければメインスレッド - クロージャーはasync関数扱い

isolated
、 nonisolated
キーワードをつけることで、スコープを隔離したり、隔離しなかったりができる。
Actorを独自定義する場合、使いどころありそうだけど、Actorつくることがそんなにないかも?

async/await、defer文との相性が悪い?

キャッチアップした成果を記事化したので閉じ
このスクラップは2023/05/02にクローズされました
ログインするとコメントできます