Unless you specify a function parameter as inout, you may not mutate it.
SKSpriteNode() is of type class, which is a reference type: not marking it inout means you may not mutate the reference itself, whereas you may, however, mutate mutable (accessible) members of the reference type (accessible via the non-mutable reference).
bool, on the other hand, is a value type, which means that you may not mutate it when supplying it as an argument, unless you explicitly mark it as inout.
A hopefully instructive example:
class MyReferenceType { var valueTypeMember: Int = 0 } struct MyValueType { var valueTypeMember: Int = 0 } func mutateMyReferenceAndValueInstances( _ ref: MyReferenceType, _ val: inout MyValueType) { ref.valueTypeMember = 42 val.valueTypeMember = 43 } let ref = MyReferenceType() var val = MyValueType() print(ref.valueTypeMember, val.valueTypeMember) // 0 0 mutateMyReferenceAndValueInstances(ref, &val) print(ref.valueTypeMember, val.valueTypeMember) // 42 43
See e.g. the Language Guide - Functions for details regarding in-out parameters.
getTouchedthat was passed to it?