[Swift]String型をキーとするDictionaryを拡張する

String型の値をキーとするDictionary型のextensionを実装したい場合、いわゆる constrained extension でキーの型を限定して拡張する。

extensionwhen clauseはプロトコルで指定する必要があるため、

のように実装したところ、以下のように警告されてしまった。

Cannot subscript a value of type 'Dictionary<Key, Value>'with an index of type 'String'

String型はStringLiteralConvertibleを適応しているので、問題ないと思ったのだが。(※)

パラメタであるString型のkeyを、Key型、すなわちStringLiteralConvertibleを適用するクラスのインスタンスとしてoptional bindingすることにより、無事期待通りの結果を得ることができた。


<追記>
StringLiteralConvertibleをキーとしたDictionaryのextensionの場合、キーが必ずしもString型であるとは限らないためだろう。
(StringLiteralConvertibleを適応していれば、いかなる型でもキーになりうる。)

コメントを残す