エラー
- 2ヶ月ぶりくらいに競技プログラミングに取り組んだら結構忘れていたので
- 文字列 S を受け取りArrayに変換した時に発生する下記のエラーについて
No exact matches in call to intializer
解決策
// NG
let array_s = Array(s)
// OK
let array_s: [String] = Array(s).map{ String($0) }
誤解を招きそうなので補足します。
・NGのコードでも動作しますし、文法上問題はありません。
・今回のコードはreadLineで得た文字列がCharacter型で格納されていたために、その後のコードでコンパイルエラーが発生したものとなります。その前提で読み進めていただければと思います。
ポイント
① [String]型の配列であることを明示的に示しておく
[String]
- Swiftは型推論が強力な言語であるが、きちんと明示的に示しておくに越したことはない。
② map関数を用いて各要素をStringに変換しておく
.map{String($0)}
- 高級関数
mapを用いることで、配列の各要素に一括で特定の処理を適用することができる。