Objective-C语言——Protocol协议

打开Xcode->选择IOS->Application->Single View Application->然后按next

2.如果你创建了工程那快捷键(com-shift-N)->选择IOS->Application->Single View Application->然后按next


Student.h

#import 

//协议 正式协议用 @protocol 来定义
@protocol FoodProtocol 


/*
    在方法声明时,可以有两个关键字去限制是否必须上遵循该协议的类去实现此方法。
    @required 标注的地方必须实现的方法
    @optional 标注的方法可以选择实现
 */

@required
-(void)sendFood:(BOOL)flog;

@optional
-(void)sayHello;

@end


@interface Student : NSObject

@property(nonatomic,assign)BOOL flag; //基本类型用 assign

//声明一个必须实现协议的对象
@property(nonatomic,assign) id delegate;  //delegate 必须去实现的协议


@end


Student.m

#import "Student.h"

@implementation Student

//flag 的设置器
-(void)setFlag:(BOOL)flag
{

    _flag = flag;
    
    //- (BOOL)conformsToProtocol:(Protocol *)aProtocol;  //确定一个对象是否实现了某个协议
    
    if (self.delegate && [self.delegate conformsToProtocol:@protocol(FoodProtocol)]) {
        [self.delegate sendFood:_flag];
    } else {
        NSLog(@"代理不存在");
    }

}


@end


Waiter.h

#import 
#import "Student.h"

@interface Waiter : NSObject 

@end


Waiter.m

#import "Waiter.h"

@implementation Waiter

-(void)sendFood:(BOOL)flog
{
    if (flog) {
        NSLog(@"学生忙,我们送餐");
    } else {
        NSLog(@"学生不忙,我们不送餐");
    }
}

@end

ViewController.m

#import "ViewController.h"
#import "Student.h"
#import "Waiter.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    /*
        我们之前讲过非正式协议(NSObject 类目),那么肯定还有正式协议
     在 OC 中,一个类可以实现多个协议,通过协议可以弥补单继承的缺点,但是协议跟继承不一样,协议只是一个方法列表,方法的实现得遵循该协议的类去完成。
     
     协议:协议是一套标准,这个标准里面声明了很多方法,但是不关心具体这些方法是怎样实现的,具体的实现是由遵循这个协议的类取完成的
     */
    
    
    Student *student = [Student new];
    Waiter *waiter = [Waiter new];
    
    student.delegate = waiter;
    student.flag = YES;
    
    
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end


运行结果

2016-01-02 16:45:32.368 OC_LX_09_02[1399:27274] 学生忙,我们送餐


你可能感兴趣的:(Objective-C语言)