Int
に実装されたプロトコルToString
と、ToString
という配列をとる関数があるとします。Swift:実際のタイプの配列をプロトコルタイプの配列に変換する
Int
の配列をこの関数に渡そうとすると、エラーCannot convert value of type '[Int]' to expected argument type '[ToString]'
が返されます。
ただし、配列にmap
を使用すると関数に渡されます。これは型キャストを行うための想定された方法ですか、または配列を繰り返し処理しない方法がありますか?または、これはコンパイラによって最適化されていますか?
全例:
protocol ToString {
func toString() -> String
}
extension Int: ToString {
func toString() -> String {
return "\(self)"
}
}
func log(values: [ToString]) {
values.forEach { print($0.toString()) }
}
let values: [Int] = [1, 2, 3]
// Error: Cannot convert value of type '[Int]' to expected argument type '[ToString]'
log(values)
// No error
log(values.map { $0 })
"[Int]型の値を期待される引数型 '[ToString]'に変換できないというエラーの原因をここで説明します:[Swiftでプロトコルを使用するときの型変換](http://stackoverflow.com/questions/38387256/type-conversion-use-protocol-in-swift) '[Int]'を '[ToString]'に変換するには、各要素の変換が必要です。 - これは部分的に重複しています。しかし、あなたは別の解決策を求めてきたので(そして、以下にあるものもあります)、私はそれを開いたままにしました。 –