LoginSignup
5
5

More than 5 years have passed since last update.

Objective-Cのプロトコルというもの

Posted at

前提

基本的に勉強中です。

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メソッド無いと実行時エラーになった。そもそもジェネリックスではないだろう!と。

全然まだまだだけど。なんとなく、少しわかった。

5
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5