【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')"のエラーを解決する

参考文献
NSString containsの公式ドキュメント
String containsの公式ドキュメント

エラーが出た時の状況

僕がエラーを出したのはcontains()を使用して以下のようなコードを書いた時でした。

let str: String = "ABCDEFGHI"
print(str.contains("XXX"))

実際にエラーが出ている画面はこんな感じでした。

contains()を使用した時にエラーが出た時の画像

次の項から、具体的にどのようなエラーなのか・どうしたら解決できるかを解説いたします。

"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

実際にインポート後に実行するとエラーが解消されていることが確認できます。

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を記述する。

参考文献・おすすめ文献

NSString containsの公式ドキュメント

String containsの公式ドキュメント