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にクローズされました