Avatar
class C { var i: Int = 0 } struct S { private let c = C() var num: Int { c.i += 1; return c.i } } let s = S() // letでimmutableにしてるはずなのに、 print(s.num) // 1 print(s.num) // 2 print(s.num) // 3 structでもimmutabilityを保証できるとは限らないので、 そこも含めて、「mutating以外で冪等性が壊れかねない」意図は classにすることで表現する原則がよさそうかな、と思いました