Edited at

Swift の配列は “immutable” でも値を書き換えられる(追記:仕様変更された)

More than 3 years have passed since last update.

追記: 定数に代入された配列は真に immutable となるよう変更されたとのこと SwiftのArrayがヤバくなくなった - Qiita

The Swift Programming Language 158ページには、変数に代入された配列は “mutable” で、定数に代入された配列は “immutable” だと書いてある。

Objective-C においては、文字通り mutable なNSMutableArray は値の書き換えや追加ができる一方、 NSArray は値を操作することができない。 Objective-C プログラマはそこから類推して、 Swift の immutable な配列も値を操作できないと考えるかもしれないが、それは誤りである。実際には、 Swift の “immutable” な配列は値を書き換えることができる:

let a = [1, 2, 3]

a[0] = 42
a // => [42, 2, 3]

Swift における “immutable” とは、「配列の長さを変えるメソッド(mutating func で定義されたメソッド)の呼び出しが禁止されている」という意味であることに注意(同じく158ページにそう書いてある)。