SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Objective-CユーザーのためのSwift入門

SwiftでアプリのUIと画面の操作を実装する

Objecive-CユーザーのためのSwift入門 第5回

  • X ポスト
  • このエントリーをはてなブックマークに追加

デリゲートの利用

 デリゲートとは、簡単に言うと他のオブジェクトから利用されるメソッドのことです。Swiftでは、Objective-Cと同様に特定のUI部品のデリゲートのためのクラスが存在し、UI部品に応じてコールバック的にデリゲートのメソッドを利用することができます。

デリゲートを実装する

 デリゲートのメソッドは、インターフェース的に他のオブジェクトから利用されるメソッドが定義されているだけです。そのため、デリゲートについてはメソッドの集合という意味で一般的なクラスとは別にプロトコルという名称で呼ばれます。

 デリゲートを利用する場合は、最初にデリゲートのプロトコルをビューコントローラーで実装します(①)。画面に配置するUI部品のオブジェクトのdelegateプロパティでデリゲートを実装したビューコントローラーを指定します(②)。その後、利用したいデリゲートのメソッドをビューコントローラー内に記述します(③)。アプリ起動後、UI部品の動作に応じて記述したメソッド内の処理が行われます(④)。

 以上のことを図で整理すると次のようになります。

デリゲートの利用のイメージ
デリゲートの利用のイメージ

 デリゲートの仕組みは、Swiftと言語の仕組みが似ているスクリプト言語の中ではほとんど見られません。iOSアプリではすべてのフレームワークで共通する仕組で、一度覚えると非常に便利です。

デリゲートを使ってUI部品の動作時の処理を行う

 デリゲートのメソッドでは、あらかじめ想定されたUI部品の動作に応じたメソッドが細かく用意されています。addTarget(_:action:forControlEvents:)メソッドでは、UI部品で発生するイベントを指定しなければなりませんが、delegateの場合はメソッド自体がイベントごとに分かれていて開発者自身がイベントを指定する必要はありません。また、メソッドによっては操作が行われたUI部品以外に、操作が発生した位置等の情報が引数で渡されることもあり、この点でもaddTarget(_:action:forControlEvents:)メソッドより便利なことも多いです。

 スクロールビューを操作した際の処理を指定できるUIScrollViewDelegateプロトコルを例に、デリゲートの使い方を記します。

リスト3 デリゲート利用の例(ViewController.swift抜粋)
// ビューコントローラーでUIScrollViewDelegateプロトコルを実装
class ScrollViewController: UIViewController, UIScrollViewDelegate {

    // InterfaceBuilderでスクロールビューを配置
    @IBOutlet var scroll: UIScrollView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // delegateプロパティで実装したデリゲートを指定
        scroll.delegate = self;
        // スクロールする内部のサイズを指定
        scroll.contentSize = CGSizeMake(scroll.frame.size.width, scroll.frame.size.height*2)
    }

    // デリゲートのメソッドを記述
    // スクロール開始時にスクロールビューの色を青に
    func scrollViewWillBeginDragging(scrollView: UIScrollView)
    {
        scroll.backgroundColor = UIColor.blueColor()
    }

    // スクロール終了時にスクロールビューの色を赤に
    func scrollViewDidEndDragging(scrollView: UIScrollView,
        willDecelerate decelerate: Bool)
    {
        scroll.backgroundColor = UIColor.redColor()
    }
デリゲート利用の例
デリゲート利用の例

 ビューコントローラーでUIScrollViewDelegateプロトコルを実装し、スクロールビューのdelegateプロパティでプロトコルの実装先を指定することで動作時の処理を行うことができます。開発者が記述するのはデリゲートのメソッドの中だけでよく、短いコードで的確にUI部品の処理を行うことが可能です。

次のページ
タッチの利用

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Objective-CユーザーのためのSwift入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8473 2015/03/05 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング