[Swift]戻り値に指定されたGenericsの型のインスタンスを取得する

例えば以下のような戻り値のみGenericsとしているメソッドがあったとして、C#でいうところの new T(); と書くような感じで、メソッド内でGenericsの型のインスタンスを取得しようとしたら、そのままではコンパイルエラーとなり少し悩みました。

“because it has no accessible initializers” とあるので、要するにinitがあれば良いのだろうということで、以下のように対象のクラスにinitを持つプロトコルを実装させて、GenericsTypeもそのプロトコルで縛りを入れてみたところ、正しくコンパイルできるようになりました。

これで、以下のコードで動くようになりました。

ネットで見かけるサンプルが、どれも引数と戻り値の両方がGenericsとされている形式だったので、ふと疑問に思ってやってみた次第です。

ちょっと面倒な感じですが、仕様としては正しい動きでしょうか。
init(コンストラクタ)をProtocol(インターフェース)にできるのは、地味に良い仕様であるように思いました。

コメントを残す

メールアドレスが公開されることはありません。