There is a significant difference between "this state should be mutated by anyone concurrently" and "this state can only be mutated by this party, others ask to do so". In the first case, that's a one property that you need safely mutate from anywhere, and this can be done using locks – perfect tool for the job. While actors provide isolation: the state is guaranteed to live in this isolation, accessed from there, mutated, etc. Actor here define "autonomous unit" that performs some work, and other parts send messages to it.
The latter is a completely different way to structure the program: instead of having multiple parties that operate on a single state, you have one entity that handles everything related to this state. That is making much easier to reason about the code, since now you have units that operate on some state, and only they can change it, so now you design how this units communicate with each other to perform work.
They able to do so, just with additional friction — because they aren't designed for this in the first place.
So the problem here is that if you need it, you are either using wrong tool for the job, or using tool not in the way it is supposed to be used.
Side note on compiler fighting
In languages like Swift (or Rust), where a lot of checks, that previously was a concern of a developer, moved to a compiler, it is often experience of "fighting a compiler" to make something, that seems obvious and simple, work. That's the case with Rust borrow-checker, now that's the case with Swift Concurrency. While at first this is really unpleasant, and sometimes can annoy experienced developers as well, I'd argue that in majority of cases the necessity to fight a compiler goes from the wrong use of a features it provides. It simply tells you that the design/way to implement things you have invisioned isn't correct in its world.
We can argue about pros and cons of that, to me that's an obvious plus, somebody might want more freedom and not be told by the compiler what to do, but that's the state of the things. Actors model has certain properties it has to posses to work in intended way, so that compiler enforces them.
I have illustrated the issue with async setters that can be easily introduced here, as well as uncertainty they bring with previous post. How do you imagine async setter to work with the last example? I don't know tbh.
As for writing setter, the first thing here for me is that if you need to write a setter, you are more likely using actors in a wrong way (I mean, if that's really just a setter, not some logical operation that happen to look like one). But even if we put this aside, explicit setters make you think if you need to update several properties, then probably use batch setter? Then they also state clearly what mutations on the actor happen, so you keep this isolated picture of a state and its mutations, compared to async setters can be invoked anywhere in the app, so that you don't know what happens to your isolated state. And the more friction you have to get through to make it happen, the more likely you won't do that at all.