Objective-C:プロトコルを使用しクラスにDelegateを実装するサンプル

クラス間のデータの受け渡しの中でもよく目にするDelegateですが、Objective-C初心者の方でもソースコードをパターン化して覚えれば簡単に実装することが出来ます。パターンの繰り返しで自然と言語に対する理解も深まるのではないでしょうか。
ここでは分かりやすく、MainiewController と MyClass 間での Delegate を使ったデータの受け渡しをパターン化しメモしておきます。

プロトコルを使用しクラスにDelegateを実装する

デリゲート(プロトコル)とは?

DelegateはObjective-Cのプロトコル機能を使ってオブジェクト間でメッセージのやりとりを行うための仕組み。Delegate自体は機能ではない。

サンプルコードで行っていること

  1. MainViewController で MyClass のインスタンス myclass を生成
  2. インスタンス myclass から MyClass のメソッド callMyMethod を実行
  3. MyClass のメソッド callMyMethod から MainViewController の myMethod が呼ばれる

サンプルコード

MainViewController.h
#import <UIKit/UIKit.h>
#import "MyClass.h" //クラスファイルをインポートする

@interface MainViewController : UIViewController 

@end
MainViewController.m
@implementation MainViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // クラス MyClass のインスタンスを生成
    MyClass *myclass = [[MyClass alloc]init];

    // デリゲートを Self(MainViewController)に設定
    myclass.delegate = self;
    
    // クラス MyClass の メソッド callMyMethod を実行
    [myclass callMyMethod];
}

- (void)myMethod:(NSString *)str {
    NSLog(@"Message from MyClass : %@",str);
}
MyClass.h
#import <UIKit/UIKit.h>

//プロトコルでデリゲートを宣言する
@protocol MyClassDelegate

//このメソッドは宣言のみで実装は MainViewController.m に行う
- (void)myMethod:(NSString *)str;

@end

@interface MyClass : UIViewController

// delegate のプロパティは assingn にする
@property (nonatomic,assign) id <MyClassDelegate> delegate;

- (void)callMyMethod;

@end
MyClass.m
@implementation MyClass

@synthesize delegate = _delegate;

- (void)callMyMethod {
    NSString* myString = @"World is mine!";
    
    // セレクタから MainViewControllerに実装された myMethod を実行する
    if ([_delegate respondsToSelector:@selector(myMethod:)]) {
        [_delegate sampleMethod:myString];
    }
}

まとめ

デリゲートがどう実装され、何をやっているのかを理解すれば、アプリ制作時のコーディングの幅が劇的に広がると思います。頑張って体得しましょう。

この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。

siro:chro 無料ゲーム SQN をリリースしました

img_sqn_00

sirochro 初の無料ゲームアプリ SQN をリリースしました。
記事:SQN: iOS 無料ゲームアプリ SQN - Sequential Numbers をリリース
ちょっとした時間に楽しめる完全無料のゲームなっていますので、是非ダウンロードして遊んでみてください。

↓SQN のダウンロードはこちらから

Related Contents

Pickup Contents