8

次のコードは、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宣言されている場合、アクセス中に言わざるを得なくなります。なぜそれが違いを生むのですか?犬は参照型です。その場で可変であり、またはで宣言されているかどうかに関係なく、まったく同じ方法で可変です。varletawaitletvar

4

1 に答える 1