Swift Array optional Type and subscripting (Beta 3)
arrays, swift, xcode6
Solution
Because subroutine parameters are implicitly defined with `let` hence, non mutable. Try changing the declaration to:
func exchange<T>(inout data: [T], i: Int, j: Int) {
and the invocation to:
exchange(&date, 0, 2)
You can also use `var` but that would only allow the array to be modified within the subroutine. The big change for beta 3 was to make arrays really pass by value instead of just kind of sorta pass by value some of the time, but not the rest.
Problem
I'm following the 2014 WWDC tutorial 408: Swift Playgrounds using XCode Beta 3 (30 minutes in). The Swift syntax has changed since Beta 2. ``` var data = [27, 46, 96, 79, 56, 85, 45, 34, 2, 57, 29, 66, 99, 65, 66, 40, 40, 58, 87, 64] func exchange<T>(data: [T], i: Int, j: Int) { let temp = data[i] data[i] = data[j] // Fails with error '@lvalue $T8' is not identical to 'T' data[j] = temp // Fails with error '@lvalue $T5' is not identical to 'T' } exchange(data, 0 , 2) data ``` Why I can't modify a mutable integer array in this way?