The naming is motivated in the guide:
Naming
This method’s and type’s name match the term of art used in other languages and libraries.
Comparison with other langauges
Rust: Rust provides a chain function that concatenates two iterators.
Ruby/Python: Ruby and Python’s itertools both define a chain function for concatenating collections of different kinds.
And the actually returned type is Chain<Self, S>:
public func chained<S: Sequence>(with other: S) -> Chain<Self, S>
where Element == S.Element
{
Chain(base1: self, base2: other)
}
It is not Concatenation<Self, S> as the guide says.
I also think that the guide might be potentially misleading when it says:
let numbers = [10, 20, 30].chained(with: 1...5)
// Array(numbers) == [10, 20, 30, 1, 2, 3, 4, 5]
//
let letters = "abcde".chained(with: "FGHIJ")
// String(letters) == "abcdeFGHIJ"
since it (if hastily read) might seem to suggest that the return types are Array and String, rather than:
Chain<Array<Int>, ClosedRange<Int>>
and
Chain<String, String>
As @lukasa said, the usefulness of chained is that it produces a Chain<Base1, Base2> in O(1) time, by composing Base1 and Base2 (chaining them and keeping their types, not by eg copying their contents into an Array or String).
So for example, Base1 can be [1, 2, 3] and Base2 can be an infinite sequence of random numbers and they can still be chained (in essentially no time).