To var or let struct properties?

That should be written with private(set), and there should be mutating functions which allow modifications that maintain the invariant.