前提
基本的に勉強中です。
Objective-CのプロトコルはJavaのインターフェース相当とか結構いろいろなところに書いてあるので、こんな感じかなとあんまり実用性のない例で書いてみました。
プロトコルTalk
Talk.h
#import <Foundation/Foundation.h>
@protocol Talk <NSObject>
@required
-(void)talk;
@end
クラスCat
Cat.h
#import <UIKit/UIKit.h>
#import "Talk.h"
@interface Cat : NSObject <Talk>
@end
Cat.m
#import "Cat.h"
@implementation Cat
-(void)talk{
NSLog(@"ニューー");
}
@end
クラスDog
Dog.h
#import <Foundation/Foundation.h>
#import "Talk.h"
@interface Dog : NSObject <Talk>
@end
Dog.m
#import "Dog.h"
@implementation Dog
-(void)talk{
NSLog(@"わうん");
}
@end
MainとしてクラスViewController.mで実行
ViewController.m
#import "ViewController.h"
#import "Cat.h"
#import "Dog.h"
@interface ViewController ()
{
NSMutableArray <Talk> *objects;
}
@end
@implementation ViewController
- (void)viewDidLoad {
objects = [@[] mutableCopy];
Cat *cat = [[Cat alloc] init];
Dog *dog = [[Dog alloc] init];
[objects addObject:cat];
[objects addObject:dog];
for (int i = 0; i<[objects count]; i++) {
[objects[i] talk];
}
}
@end
2014-05-20 22:23:34.009 abdcfgl[67806:60b] ニューー
2014-05-20 22:23:34.009 abdcfgl[67806:60b] わうん
<Talk>
とか書いてあるけれど、Talkプロトコルと関係ないオブジェクトも配列に追加できて、talkメソッド無いと実行時エラーになった。そもそもジェネリックスではないだろう!と。
全然まだまだだけど。なんとなく、少しわかった。