In Swift Programming Language, it says:

1. “all of the basic types in Swift—integers, floating-point numbers, Booleans, strings, **arrays** and dictionaries—**are value types**, and are implemented as structures behind the scenes.”
2. “**structure** instances are **always passed by value**, and class instances are always passed by reference”
3. “If you assign an Array instance to a constant or variable, or pass an Array instance as an argument to a function or method call, the **contents of the array are not copied** at the point that the assignment or call takes place. Instead, both arrays share the same sequence of element values. When you modify an element value through one array, the result is observable through the other.”

Clearly, Swift is contradicting itself when it comes to array. Is array a value type or reference type?