【Swift】Swiftのdelegateをサンプルで解説

delegateとはAclassの処理をBclassにやらせたい(移譲する)という時に使用します。

依頼class
// プロトコル設定
protocol StrDelegate {
    func getLanguage(greeting: String) -> String
}

class Order {
    // ここで、プロトコルに従うクラスのインスタンスを用意する
    var delegate: StrDelegate?
    let myGreeting = "Hello!"

    func getHelloSwift() -> String {
        return self.delegate.getLanguage(greeting: myGreeting)
    }

    func print() {
        print(self.getHelloSwift)
        // "Hello!Swift!!"
    }
}
代理class
class Agent {
  let order = Order()
  // Orderクラスの依頼先は自分であることを明示
  order.delegate = self
  let language = "Swift!!"
}

extension Agent: StrDelegate {
  func getLanguage(greeting: String) -> String {
      return greeting + language
  }
}

func print()を呼ぶとどうなる?

  • func getHelloSwift()が呼ばれる
  • getHelloSwift()Orderのクラス変数myGreetingを持って依頼先のgetLanguage()を呼ぶ
  • getLanguage()で引数のgreetingAgentのクラス変数languageを結合させて返却
  • getHelloSwift()は上記のgetLanguage()の戻り値を返却
  • 結果"Hello!Swift"がprintされる
参考テキスト
詳解Swift 第3版 [ 荻原 剛志 ]

詳解Swift 第3版 [ 荻原 剛志 ]

価格:3,456円
(2017/1/3 01:58時点)
感想(0件)

スポンサーサイト
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中