【Swift】
"cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')"が出た時の対処方法
contains()メソッドを使用した時にエラーが出た話と解決方法
投稿日 2021/11/28 更新日 2021/11/28
こんにちは。当サイトの管理者「元木皇天」です。
今回は先日僕がSwiftで「contains()」メソッドを使用した際に、"cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')" というエラーが出たので、その時の対応について解説したいと思います。
環境
OS:MacOS Big Sur
Xcode:バージョン12.3
Swift:バージョン5.3
やりたいこと
"cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')"のエラーを解決する
目次
- エラーが出た時の状況
- "cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')"とは
- 原因と解決方法
- まとめ
- 参考文献・おすすめ文献
- 関連記事
エラーが出た時の状況
僕がエラーを出したのはcontains()を使用して以下のようなコードを書いた時でした。
let str: String = "ABCDEFGHI" print(str.contains("XXX"))
実際にエラーが出ている画面はこんな感じでした。
次の項から、具体的にどのようなエラーなのか・どうしたら解決できるかを解説いたします。
"cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')"とは
"cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')"の意味をGoogle翻訳で和訳すると以下のようになりました。
--原文--
cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')
--和訳文--
タイプ 'String'の値を期待される引数タイプ 'String.Element'(別名 'Character')に変換できません
簡単に言うと引数として渡している値の型が間違っているということですね。
引数にはCharacter型(1文字)を渡さなければいけないのに、String型(文字列)を渡しているためエラーになってしまっています。
原因と解決方法
さて、エラーの内容は分かりましたので原因と解決方法についてお話ししたいと思います。
このエラーの原因は、インポート不足です。
ですので、以下のようにインポートを記述してあげればエラーが解消します。
import Foundation
実際にインポート後に実行するとエラーが解消されていることが確認できます。
--補足--
今回のエラーが起きたそもそもの原因について補足という形で追記させていただきます。
元々、SwiftのStringクラスはcontains()メソッドを持っていますが、引数とてCharacter型しか受け取ることのできないcontains()しか持っていません。(厳密にはもう一つありますが今回は割愛)
そのため、そのままStringクラスのcontains()メソッドに文字列を引数として渡すとエラーになってしまうという感じです。
import Foundationを行うと、StringクラスではなくNSStringクラスのcontains()メソッドを使用できるようになり、このメソッドは引数に文字列を受け取ることができるためエラーにならずに実行することができるという感じです。
インポートは忘れずに行いましょうということですね。
まとめ
Swiftで"cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character')"のエラーが出た時は
import Foundationを記述する。