8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Swiftのプロトコルってなに?

Last updated at Posted at 2019-05-24

この記事は何?

Swiftプログラミングにおけるプロトコルについて基本の部分を調べました。

Swiftを基礎から学ぶには
自著、工学社より発売中の「まるごと分かるSwiftプログラミング」をお勧めします。変数、関数、フロー制御構文、データ構造はもちろん、構造体からクロージャ、エクステンション、プロトコル、クロージャまでを基礎からわかりやすく解説しています。

実行環境

Xcode10.2.1
Swift5.x

プロトコル?

ゴースト・プロトコル

スパイ映画 Mission: Impossible シリーズにはこんなセリフが必ずある。
「例によって君もしくは君のメンバーが捕らえられ、或いは殺されても当局は一切関知しないから、そのつもりで。」
要は「任務を実行した結果、失敗しても知らんぷりするよ」ってこと。
もっと言うと...
「何かあっても知らんぷりするから、そのつもりで実行してね」ってこと。
スパイ活動って大変ですね。
この「知らんぷりする約束」を映画の中で「ゴースト・プロトコル」と呼んでいる。
バレても知らんぷりできるから、スパイ任務ができるんですね。

Swiftプログラミングでのプロトコル

「あるデータ型オブジェクトが何かを実行するときのルール」と言える。
逆に言うと...
「ルールに従っているから、それできるよ」となる。
あるデータ型がプロトコルに準拠していれば、何かが出来ることが保証されるんですね。

CustomStringConvertibleプロトコルに準拠する

こんな構造体があったとして

カスタムのFruit型
struct Fruit {
    var emoji: String
    var name:  String
}

applebanana オブジェクトを生成して...
コンソール出力する。

インスタンス化
let apple = Fruit(emoji: "🍎", name: "Apple")
let banana = Fruit(emoji: "🍌", name: "Banana")

print(apple)
print(banana)

何が出力されるか。
🍎かな?Apple かな?
🍌かな?Banana かな?

コンソール出力結果
Fruit(emoji: "🍎", name: "Apple")
Fruit(emoji: "🍌", name: "Banana")

思ってたのと、違う。
テキトー感がスゴい。(イニシャライザのまんま)

出力するルール

print()関数を実行したら...
description プロパティを出力する」というルールがある。
これが CustomStringConvertible プロトコル。

プロトコルに準拠させる

print() 関数でイイ感じに出力させるように、Fruit 型を CustomStringConvertible に準拠させると...

print()関数でemojiを出力させる
struct Fruit: CustomStringConvertible {
    var emoji: String
    var name:  String
    
    var description: String {
        return "\(self.name) \(self.emoji)"
    }
}

description は計算プロパティを使って、値を返しています。
コンソール出力すると...

CustomStringConvertibleなFruit型の出力結果
Apple 🍎
Banana 🍌

いろんなプロトコル

Swiftには標準で、いくつものプロトコルが用意されています。

  • Equatable
  • Comparable
  • Codable
  • ...

その型が何かしらプロトコルに準拠していることで動作が保証できるので、プログラムが安全になるという仕組みなんですね。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?