Objective-Cのプロトコルというもの
Qiitaから転載します。
前提
基本的に勉強中です。
Objective-CのプロトコルはJavaのインターフェース相当とか結構いろいろなところに書いてあるので、こんな感じかなとあんまり実用性のない例で書いてみました。
プロトコルTalk
#import <Foundation/Foundation.h> @protocol Talk <NSObject> @required -(void)talk; @end
クラスCat
#import <UIKit/UIKit.h> #import "Talk.h" @interface Cat : NSObject <Talk> @end
#import "Cat.h" @implementation Cat -(void)talk{ NSLog(@"ニューー"); } @end
クラスDog
#import <Foundation/Foundation.h> #import "Talk.h" @interface Dog : NSObject <Talk> @end
#import "Dog.h" @implementation Dog -(void)talk{ NSLog(@"わうん"); } @end
Mainとしてクラス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メソッド無いと実行時エラーになった。そもそもジェネリックスではないだろう!と。
全然まだまだだけど。なんとなく、少しわかった。