クラス間のデータの受け渡しの中でもよく目にするDelegateですが、Objective-C初心者の方でもソースコードをパターン化して覚えれば簡単に実装することが出来ます。パターンの繰り返しで自然と言語に対する理解も深まるのではないでしょうか。
ここでは分かりやすく、MainiewController と MyClass 間での Delegate を使ったデータの受け渡しをパターン化しメモしておきます。
プロトコルを使用しクラスにDelegateを実装する
デリゲート(プロトコル)とは?
DelegateはObjective-Cのプロトコル機能を使ってオブジェクト間でメッセージのやりとりを行うための仕組み。Delegate自体は機能ではない。
サンプルコードで行っていること
- MainViewController で MyClass のインスタンス myclass を生成
- インスタンス myclass から MyClass のメソッド callMyMethod を実行
- MyClass のメソッド callMyMethod から MainViewController の myMethod が呼ばれる
- MainViewController.h
-
[code]
#import
#import “MyClass.h” //クラスファイルをインポートする@interface MainViewController : UIViewController
@end
[/code] - MainViewController.m
-
[code]
@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);
}
[/code]
サンプルコード
- MyClass.h
-
[code]
#import//プロトコルでデリゲートを宣言する
@protocol MyClassDelegate//このメソッドは宣言のみで実装は MainViewController.m に行う
– (void)myMethod:(NSString *)str;@end
@interface MyClass : UIViewController
// delegate のプロパティは assingn にする
@property (nonatomic,assign) iddelegate; – (void)callMyMethod;
@end
[/code] - MyClass.m
-
[code]
@implementation MyClass@synthesize delegate = _delegate;
– (void)callMyMethod {
NSString* myString = @”World is mine!”;// セレクタから MainViewControllerに実装された myMethod を実行する
if ([_delegate respondsToSelector:@selector(myMethod:)]) {
[_delegate sampleMethod:myString];
}
}
[/code]
まとめ
デリゲートがどう実装され、何をやっているのかを理解すれば、アプリ制作時のコーディングの幅が劇的に広がると思います。頑張って体得しましょう。
この記事がみなさんのお役に立ちましたら、下記「Share it」よりブックマークやSNSで共有していただければ幸いです。