web-dev-qa-db-ja.com

文字列の配列を1つの文字列に結合する方法Swift 4

Swift 4の前に、文字列の配列を単一の文字列に結合して使用しています。このコードは完全に機能しています。

let array = ["Andrew", "Ben", "John", "Paul", "Peter", "Laura"]
let joined = array.joined(separator: ", ")

 //output:- "Andrew, Ben, John, Paul, Peter, Laura"

しかし今Swift 4およびXcode 9では、次のエラーが表示されます

メンバー 'joined()'へのあいまいな参照

私の質問は、配列のすべての要素をどのように結合できるかです。

enter image description here

8
Arjun Yadav

これは、質問のpseudo-codeが誤解を招きやすく、エラーを再現しない典型的な例です。

このエラーは、flatMapを使用しているために発生します。配列はIntのオプションではない単一レベルの配列なので、mapを使用し、describingイニシャライザは使用しないでください。

_func getNumbers(array : [Int]) -> String {
    let stringArray = array.map{ String($0) }
    return stringArray.joined(separator: ",")
}
_

あいまいさは、オプションではないシーケンスに適用されたflatMapの意味が異なることです。

ドキュメントから

_let numbers = [1, 2, 3, 4]

let mapped = numbers.map { Array(count: $0, repeatedValue: $0) } 
// [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]

let flatMapped = numbers.flatMap { Array(count: $0, repeatedValue: $0) }
 // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
_

実際、s.flatMap(transform)Array(s.map(transform).joined())と同等です。

9
vadian