id
を let
にしても↓はできてしまうみたいな話ですね。 struct Foo: Identifiable { let id: Int var value: String } struct Bar { var foo: Foo } var bar = Bar(foo: Foo(id: 1, value: "ABC")) //bar.foo.id = 999 // NG bar.foo = Foo(id: 999, value: bar.foo.value) // OK
var
が適切でない既知パターンとしては複数のプロパティが連動しているケースで片方だけ変更された場合に困るということがありましたが( didSet
等で辻褄を合わせるか、変更を禁止するか)、 id
はキーとしての利用が想定されているので Dictionary
に入れた後で変更されると困るというのは新しいパターンかなと。