【Swift入門】ジェネリクス(generics)の使い方を分かりやすく解説!

SwiftではIntやStringなどの型に左右されずに、柔軟に動作する関数やクラスを定義することができるジェネリクス(generics)という機能が用意されています。

この記事では、

・ジェネリクス(generics)とは
・ジェネリクスの考え方や使い方

というジェネリクス(generics)の基本的な解説から、

・ジェネリクスのクラスを使用する方法
・ジェネリックプロトコルの使い方

などの応用的な使い方に関しても解説していきます。

今回はそんなジェネリクス(generics)の使い方についてわかりやすく解説します!

※この記事ではSwift4.0を使用しています。

ジェネリクス(generics)とは

ジェネリクス(generics)とは、ユーザーが定義した要件に応じて、指定したタイプで柔軟に動作する再利用可能な関数や型を指定できる機能です。

ジェネリクスはSwiftの特徴的な機能の1つで多くの機能でジェネリクスは使用されています。

たとえば、Swiftの配列型やディクショナリ型(辞書)でも型に左右されずに値を格納したり取り出すことが可能です。

ジェネリクス関数の定義:

ジェネリクスを使用するには、関数名のあとに<T>を指定します。

<T>は型パラメータと呼ばれるもので、この関数ではTという型を使用することを意味しています。

<T>を指定すると、関数が呼び出されたときにSwiftのシステムで自動で適切な型に置き換えて処理を実行してくれます。

ジェネリクスの型は<T>でなくても構いせんが、慣例として<T>が使われています。

ジェネリクスの考え方・使い方

ここではジェネリクスの考え方や具体的な使い方について見ていきましょう。

通常の関数の使い方

以下はInt型の引数を2つ受け取ってInt型の値を返却する関数です。

関数で受け取る型が分かりきっている場合は、このような指定方法でも問題ありません。

しかし、もしFloat型やDouble型などの異なる引数を渡したい場合、この関数では以下のように小数点を含んだ引数を指定すると、コンパイルエラーになります。

次項ではそんな問題を解決するジェネリクスの基本的な使い方について解説します。

ジェネリクスの使い方

ジェネリクスを指定すると、1度の定義であらゆる型に対応することができます。

前項で型の異なる引数を関数に渡したいとき、通常なら関数のオーバーロードを作成する必要がありますが、ジェネリクスなら以下のように指定することでさまざまな型に対応可能です。

しかし、上記のサンプルを実行するとエラーとなります。

これは関数内でプラス演算子を使用しているため、ジェネリクス型はさまざまな「型」には対応していますが、+などの演算子については対応していないからです。

そのため、ジェネリクス型を指定した関数で演算処理を行う場合は、「関数名<T: Numeric」と指定することで、数値型要素を持つ関数であることを宣言する必要があります。

このプログラムを実行すると、Int型とDouble型の演算が1つの関数で実行できます。

ジェネリクスのクラスを使用する

クラス名の型にT型を指定することにより、クラスのインスタンス生成時にあらゆる型を指定することができます。

以下にジェネリクスを指定したクラスの記述方法を紹介します。

実行結果:

このようにインスタンス生成時にInt型やString型など柔軟に指定できることがわかりますね!

しかしジェネリクス型を指定する場合は、指定した型については意識しておかないと後々の処理で型の不整合がおきたりしますので注意しましょう。

ジェネリックプロトコルの使い方

ジェネリックプロトコル(Generic Protocol)はジェネリクスを使用したプロトコルです。

Protocol(プロトコル)はクラスの型や動作を決めておくための設計図のようなものです。

Swiftではプロトコルにもジェネリクスを使用することが可能です。

以下にプロトコルを定義し、Int型、String型のクラスを定義しています。

プロトコルでジェネリクスを使用するためには、定義内で「associatedtype T」のように任意の型を指定する必要があります。

プロトコルについて詳しく知りたい方は以下の記事を参考にしてください

まとめ

ここではSwiftのジェネリクス(generics)について、

・ジェネリクス(generics)とは
・ジェネリクスの考え方や使い方
・ジェネリクスのクラスを使用する方法
・ジェネリックプロトコルの使い方

などについて解説しました。

ジェネリクスはSwift特有の機能で、他言語からSwiftを学ぶ場合とっつきにくいイメージもあります。

しかしジェネリクスを使用すれば、型を気にせずにさまざまな処理を行うことができますので非常に便利です。

もしジェネリクスについて忘れてしまったら、この記事を思い出してくださいね!

Swiftカリキュラム無料公開中!

この記事はSwift入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Swift学習に必要な情報を一つにまとめていますので効率よくSwiftを学ぶことが出来ます。この機会に是非活用していただければと思います。

【初心者必見!】Swift完全攻略ガイド | 学習・アプリ開発・仕事獲得!
更新日 : 2019年4月2日

アプリ開発未経験でも安心サポート!まずは無料体験レッスン!

アプリ開発、興味あるけど未経験だし、、、」とお悩みの方、ご安心ください。

  • 24時間質問し放題
  • あなただけのオーダーメイドカリキュラムで学習の効率化
  • 仕事獲得方法からオリジナルアプリ開発方法

侍エンジニア塾では徹底したサポートによる「フルオーダーメイドカリキュラム」を作成しています。

まずは無料体験レッスンで、「挫折しない学習方法」や「あなただけの学習ロードマップ」を知り、学習の効率化をしましょう。

Swiftならではの学習の進め方、仕事の獲得方法など、より具体的なアドバイスもさせていただいています。

詳しいサービス内容は、下記よりご参照ください。

cta_swift4

非常識な結果を出す卒業生多数!

エンジニアキャリア戦略

人気記事セレクション

3000名以上来場の人気セミナーが開催決定

18歳で時給6000円だった侍エンジニア塾代表の木内より、『プログラミングで人生を変える』ための学習方法をお教えます。

0からプログラミングを習得し、フリーランスエンジニアになる方法プログラミング学習の効率を劇的に上げる学習メソッドを解説しますので、奮ってご参加ください。

  • 日付:4/20(土),4/27(土)
  • 時間:14:00〜17:35終了予定
  • 場所:当社 道玄坂オフィス
  • 住所:〒150-0043 東京都渋谷区道玄坂2丁目11-1 Gスクエア渋谷道玄坂 4F *Googleマップでは「東京都渋谷区道玄坂2丁目11-1」で検索してください。近隣にスクエア渋谷という別のビルがあるためご留意ください。
  • 参加費:無料
  • URL:https://seminar.sejuku.net/
詳しくは下の画像をクリックして弊社セミナー内容をご確認ください。

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

ヤマシタ

フリーランスエンジニア。ITに関わるさまざまなコンテンツの企画・制作も行っています。
ITに関してはノウハウ系、ライフハック系、トレンド系など、今まで200本以上の執筆経験があります