プロトコル - shirai/SwiftLearning GitHub Wiki
- プロトコルの概念について説明できる
- そもそもプロトコルとは「複数の者が対象となる事項を確実に実行するための手順等について定めたもの」という意味
- Objective-Cにおけるプロトコルは「複数のクラスで共通して使用できるメソッドの集まり」という意味
- delegateとプロトコルの違い
■詳解Objective-C2.0第12章(p304~)読み込み
- 任意のプロトコルが宣言できる
- プロトコルの宣言 @protocol プロトコル名 -(void)hoge @end
■詳解Objective-C2.0第12章(p304~)読み込み
- 作成した任意のプロトコルを採用したクラスを作成できる
- プロトコルの採用 @interface クラス名 : スーパークラス名 <プロトコル名>
■詳解Objective-C2.0第12章(p304~)読み込み
- プロトコルを継承したプロトコルを作成できる
- プロトコルを継承したプロトコルは、継承元のプロトコルのメッソド群にメソッドを追加できる @protocol プロトコル名<継承したいプロトコル名1,継承したいプロトコル名2> -(void)hoge @end
■詳解Objective-C2.0第12章(p304~)読み込み
- プロトコルを指定した型宣言ができる
@property (weak,nonatomic)id delegate;
- プロトコルを指定した型の具体的な利用方法
■詳解Objective-C2.0第12章(p304~)読み込み
- プロトコルを利用し、自作のdelegateを作成できる
- .h ファイルのプロトコル句( @protocol ~ @end )内にデリゲートメソッドを定義する
- デリゲートメソッドには必ず実装すべき@requiredと、実装が任意の@optionalがある ** @requiredはTableViewでいうところのtableView:numberOfRowsInSectionとtableView:cellForRowAtIndexPathのように 実装しなければならないdelegateメソッドを定義する場合に使う ** @optionalはtableViewの他のdelegateメソッドのように、実装が任意の、いわば拡張機能のような部分に使う *** 自身でdelegateメソッドを用意する場合は、基本必要なメソッドしか作らないので、@requiredを使う
-
通知元(ここではEditViewController)の.hファイルにプロトコル、デリゲートメソッド、デリゲートインスタンスを宣言する /*! @protocol editViewDelegate @abstract ViewControllerに処理を委譲するdelegateの定義 */ @protocol editViewDelegate //このが型宣言
@required - (void)editViewController:(EditViewController *) editViewController willDismissWithEntity:(AddressEntity *)entity; @end @interface EditViewController : UIViewController /*! @abstract ViewControllerに処理を委譲するdelegateのインスタンスを定義 */ @property (weak,nonatomic)id<editViewDelegate> delegate; @end
-
通知元(ここではEditViewController)の.mファイルにデリゲートメソッドの呼び出しを実装
- (IBAction)pushedCompleteBtn:(id)sender { //以下3行がデリゲートメソッドの呼び出し // デリゲートインスタンスが editViewController:willDismissWithEntity: メソッドを実装しているか確認します。 if ([self.delegate respondsToSelector:@selector(editViewController:willDismissWithEntity:)]){ [self.delegate editViewController:self willDismissWithEntity:self.entity]; } //元の画面に戻るメソッド [self dismissViewControllerAnimated:YES completion:nil]; }
-
準拠するプロトコルを通知先(ここではViewController)の.mファイルに採用 @interface ViewController ()
-
通知先(ここではViewController)の.mファイルに採用したデリゲートメソッドの処理を実装 (void)editViewController:(EditViewController *) editViewController willDismissWithEntity:(AddressEntity *)entity;{ //行いたい処理 self.entity = entity; }
■項目学習課題2作成 ■学習まとめ作成 ■項目学習課題4復習作成
- プロトコルの必須/オプションを設定できる
- プロトコルを宣言した際に、メソッドの上に@requiredをつければ実装必須
- @optionalをつけると実装任意のメソッドが作成できる
- 指定しなかった場合は@requiredと判断され、実装しないとコンパイルエラーとなる
■詳解Objective-C2.0第12章(p304~)読み込み
iOSアプリ開発におけるNotification(通知)の使い方 NSNotificationCenter-iPhoneアプリ開発の虎の巻 DelegateとNotificationの使い分け textFieldが隠れない!NSNotificationCenterの使い方その1