The generic type Array does not conform to Equatable. This can be further confirmed by eg:extension Array: Equatable {} // Error: Type 'Array' does not conform to protocol 'Equatable'If Array had been Equatable, we would instead have seen the same error message as the one we get for eg String (which is Equatable):extension String: Equatable {} // Error: Redundant conformance of 'String' to protocol 'Equatable'But why does your check work?While something like the following seems to suggest that Array conforms to Equatable:let a = [Hello, world] let b = [Hello, world] print(a == b) // Prints true, but doesn't mean Array is Equatable ...It's not actually the case.If we examine what is actually happening by jumping to the definition of that == in the std lib (ctrl-cmd-J on it), we'll see this:/// Returns true if these arrays contain the same elements. func ==<T : Equatable>(lhs: [T], rhs: [T]) -> BoolNote that the T there is not the Array itself, it's just the Element type of the array type, the arrays a