SwiftUIでいこう! -Actor(new!)
actorを使うことで非同期のデータ競合を回避ができるようになりました。
例えば、
actor TestActor {
let name = "aaa"
var number: Int = 0
}
と宣言して
let testActor = TestActor()
とインスタンス化して使ってみます。
testActor.name
で実行するとしっかり実行されますが、
testActor.number
を実行すると以下のようなエラーが出ます。
error: actor-isolated property 'number' can not be referenced from a non-isolated context
testActor.number
actorで宣言されていることにより、"number"が変数であるうことを認識し値が変化、競合の可能性があるので参照できないとです。
競合、可変データへの同時アクセスを防ぐため
をつけて非同期処理ができるようにします。このときにTask{}をつけて実行します。
Task{
await testActor.number
}
この記事が気に入ったらサポートをしてみませんか?