It is try to do local reasoning in action.
Why I have this error in line 37
self.state = s // Expression type '()' is ambiguous without more context
The playground has a more useful diagnostic:
Cannot assign value of type 'State<Cell.Swarm, Cell.Puck>' to type 'State<Model.Cell.Swarm, Model.Cell.Puck>'
This is because Model.Cell.Swarm
are not necessarily the same as Cell.Swarm
despite similar name. The function can use any Cell
other than Model.Cell
. Say, if Model.Cell
is Cell1
, the caller can still supply Cell2
, which is a different type. Same with Puck
.
What you'd need is to enforce the that the cell
is the same type as the Model.Cell
:
mutating func handle(cell: Model.Cell?) { ... }
because you can't really handle any Cell
that conforms to CornerRulesCell
, only this particular Model.Cell
.