iOS
 Computer >> コンピューター >  >> プログラミング >> iOS

【Swift】iPhoneアプリで2つのViewController間の通信を実現するシンプルなデリゲートの実装方法

この記事では、デリゲート(Delegate)の基本概念と、実際にデリゲートを作成する手順について解説します。まずはデリゲートとは何かから見ていきましょう。

デリゲートとは?

デリゲートとは、オブジェクト間の通信を指すシンプルな用語です。オブジェクト同士をつなぎ、互いに情報をやり取りするための基本的かつ効果的な仕組みとして、iOS開発で広く使われています。

デリゲートはどのように動作するのか?

デリゲートはプロトコル(Protocol)を使って作成されます。イベントが発生し、他のクラスへ通知したいクラス内でプロトコルを宣言します。プロトコルには関数の宣言のみを記述し、その実体(処理の中身)は呼び出し側のクラス内で定義します。

この仕組みにより、あるクラスで発生したイベントを、別のクラスが受け取って処理することが可能になります。

デリゲートの作成方法

それでは、サンプルプロジェクトを使って具体的な手順を見ていきましょう。実施するステップは以下の通りです。

  • FirstViewController というクラスと、SecondViewController という別のクラスを作成します。それぞれのView ControllerをStoryboard上にも配置してください。

  • SecondViewController 内でプロトコルを宣言します。プロトコルは、クラスやその他のオブジェクトの外側に宣言します。

protocol SecondViewControllerDelegate {
    func buttonPressedInVC2()
}
  • SecondViewController内に、先ほど作成したデリゲートのオプショナル型のオブジェクトを用意します。

var delegate: SecondViewControllerDelegate?
  • 次に、SecondViewController内で何らかのイベントが発生した際に、プロトコルで宣言した関数を呼び出すようにします。ここでは、セカンド画面でボタンがタップされたときにイベントが発生する例を作成してみましょう。

@IBAction func buttonTapped(_ sender: UIButton) {
    self.delegate?.buttonPressedInVC2()
    self.navigationController?.popViewController(animated: true)
}

これでSecondViewController側の実装は完了です。続いてFirstViewController側の作業に移りましょう。

  • FirstViewControllerを SecondViewControllerDelegate に準拠させます。Xcodeが自動的にプロトコルスタブ(必須メソッドのひな形)の追加を提案してくれるので、それに従って追加しましょう。

extension FirstViewController: SecondViewControllerDelegate {
    func buttonPressedInVC2() { }
}
  • 実装したプロトコルメソッドの中には、このデリゲートアクションが発生したときに実行したい処理を記述します。

    試しに、FirstViewControllerにラベルを配置し、デリゲートメソッドが呼ばれたときにテキストを変更する処理を書いてみましょう。

extension FirstViewController: SecondViewControllerDelegate {
    func buttonPressedInVC2() {
        self.lblOne.text = "Delegate Implemented"
    }
}
  • 最後のステップです。SecondViewController内のdelegateオブジェクトはオプショナル型のため、代入されるまで nil のままになっています。そこでFirstViewController側では、FirstViewControllerからSecondViewControllerへ画面遷移するときに、そのオブジェクトへ自身(self)を代入します。

    そのためのボタンをFirstViewControllerに配置しましょう。

@IBAction func goToNextVC(_ sender: Any) {
    let vc = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as! SecondViewController
    vc.delegate = self
    self.navigationController?.pushViewController(vc, animated: true)
}
  • もうお気づきかもしれませんが、FirstViewControllerはNavigation Controllerに組み込んでおく必要があります。これを忘れると pushViewControllerpopViewController が正しく動作しないため注意しましょう。

それではアプリを実行して、実際にどのように動作するか確認してみましょう。セカンド画面のボタンをタップすると、ファースト画面に戻ると同時にラベルのテキストが「Delegate Implemented」に更新されるはずです。

【Swift】iPhoneアプリで2つのViewController間の通信を実現するシンプルなデリゲートの実装方法


  1. iPhoneにパスコードを設定する方法|個人情報を守るセキュリティ設定をわかりやすく解説

    最近iPhoneを購入したばかりで、連絡先、メール、写真などの大切な個人情報をしっかり守りたいとお考えなら、最も手軽な対策のひとつがパスコードの設定です。パスコードとは、数字(または英数字)で構成される暗証番号のことで、他人があなたのiPhoneに勝手にアクセスすることを防ぐ基本的なセキュリティ機能です。 設定はとても簡単で、以下の手順に従えば、すぐに覗き見からiPhoneを守れるようになります。万が一盗難に遭った場合でも、第三者がメッセージを読んだり、SNSアカウントにアクセスしたり、クレジットカードや銀行口座の情報を入手したりすることはできません。 iPhoneでパスコードを設定する手順

  2. iPhoneでFace IDを設定する方法を画像付きでわかりやすく解説

    iPhoneのFace IDは、スマートフォンのロック解除、App StoreやApple Payでの購入・支払い、アプリへのログインなど、日常のさまざまな場面で活躍してくれる便利な機能です。さらに、個人情報などの機密データを守るセキュリティ機能としても重要な役割を担っています。この記事では、所要時間わずか1分ほどのFace IDの設定手順を、初心者の方にもわかりやすくご紹介します。Face IDに対応しているiPhoneはどのモデル?前面カメラを搭載しているすべてのiPhoneがFace IDに対応しているわけではありません。設定を始める前に、まずお使いのiPhoneがFace IDに対応し