まずは質問のタイトルは無視します。
質問者さんはおそらく結果として"hogefuga"
を取得したいのだと思います。間違ってたらこの回答は無視してください。
実はArray#joined()
には2種類あります。
一つはArray<String>
に実装されたjoined()
でこれは要素のString
を結合して結果としてString
を返します。
もう一つはElementがStringを除くSequenceのときに要素を連結してFlattenSequence<Array<Element>>
という特殊なSequenceを返します。
例えば[[1,2,3], [4,5,6]].joined()
は[1,2,3,4,5,6]
のようなSequenceが返します。これはArray<Int>
ではなくFlattenSequence<Array<Int>>
であることに注意してください。
提示のコード[["hoge"],["fuga"]].joined()
でもこちらが使われ、結果として["hoge","fuga"]
のようなFlattenSequence<Array<String>>
が返されます。
次にArrayのイニシャライザですがArrayには複数の種類のイニシャライザがありますが、この場合は引数としてSequenceを受け取るイニシャライザが用いられます。
このイニシャライザは受け取ったSequenceの要素をそのまま要素としたArrayを返します。
提示のコードではこのイニシャライザに[["hoge"],["fuga"]].joined()
で生成された["hoge","fuga"]
のようなSequenceを渡していますので["hoge","fuga"]
であるArrayが生成されます。
これはArray<String>
であってFlattenSequence<Array<String>>
ではないことに注意してください。
以上が提示のコードが行っていることです。
もし[["hoge"],["fuga"]]
から"hogefuga"
を得たい場合は例えば次のようにします。
swift
1let s = [["hoge"],["fuga"]].flatMap { $0 }.joined()
質問のタイトルへの回答は
swift
1array.flatMap { $0 }
です。