次のコードは、Swift 5.5 (ベータ) で有効です。
class Dog {
var name = "rover"
var friend : Dog? = nil
}
actor MyActor {
let dog = Dog()
}
func test() async {
let act = MyActor()
act.dog.name = "fido"
act.dog.friend = Dog()
act.dog.friend?.name = "fido"
}
なぜこれが合法なのですか?犬の所有物は共有状態ですね。アクターの犬に異なるスレッドで同時にアクセスする危険はありませんか? それこそが役者が守るべきものではないでしょうか。
不思議なことに、アクターのプロパティが の代わりに でdog
宣言されている場合、アクセス中に言わざるを得なくなります。なぜそれが違いを生むのですか?犬は参照型です。その場で可変であり、またはで宣言されているかどうかに関係なく、まったく同じ方法で可変です。var
let
await
let
var