There is a difference between passing a variable by value versus reference, and with modifying a parameter within a function. The concept does not need to be so highly coupled.
Getting right to the point, I would have opted for default behavior to be immutable function parameters with an optional ability to re-assign the parameter/variable within the body of the function (not allowing or expecting the changed value to be seen by the caller).
val (default) and
var could have served that purpose.
The primary reasoning is that it is very common and shows greater clarity (my opinion) when a parameter also serves as a count-down variable in a very short function. Introducing an extra local variable in such cases reduces clarity.
Swift 2.2 had a similar feature to what I describe, but deprecated it in 3. But in their case, they also had an
inout decoration as the source of the potential coding misunderstandings and therefore the rationale for deprecating re-assignment of parameters.