Help us understand the problem. What is going on with this article?

Swift protocol メモ

More than 1 year has passed since last update.

protocolとは

interfaceみたいなもの。
classstructenumで使える。
複数適用可能!
delegateで使う。

protocolで変数・関数の宣言のみして、型を作成。
その後、protocolを継承した先のclass, struct, enumで定義。

使用例

procotol使用例
protocol Animal {
    var name: String { get }
    var age: Int { set get }
    func nakiGoe() -> String
}
procotol使用例
struct Dog: Animal {
    let name = "Pochi"
    var age = 3
    func nakiGoe() -> String {
        return "わん!"
    }
}

let dog = Dog()
dog.name
dog.age
dog.nakiGoe()

struct Cat: Animal {
    let name = "Tama"
    var age = 2
    func nakiGoe() -> String {
        return "にゃ〜ん"
    }
}

protocolはinterface(とほぼ同等)なので、protocolで宣言した変数・関数を継承先のクラスで実装すれば良い。

...protocolで定義した物の中で、デフォルト値が存在する場合、あらかじめextensionで宣言しておく

extension Animal {
    func nakiGoe() -> {
        return "でふぉると~~"
    }
}

protocolを使用するメリット・目的

構造体で使える

Swiftの構造体は構造体を継承できないので、protocolでやってしまう。

構造体は値を定義する変数群?なので、ロジック部分では多用する。ので、protocolで宣言としてまとめておくとすっきりする。

インタフェース(protocol)と実体(Object)を切り離せる

まとめ

protocolを使用すれば、可読性が上がる

hedgeh0g
Python, Pwn, Reversing
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away