Objective-C入门15:协议
在 main函数里面
#import <Foundation/Foundation.h>
#import "Animal.h"
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// 协议:就是共同遵守的一个条约
// 协议可以被任何类型的方法 协议本身不是类 , 它是定义了一个其他类可实现的接口
// 协议是 只声明 不实现
//
// 没有实现的类目 又叫 非正式协议
// 非正式协议是以圆括号来表示的 而正式协议是用< >来表示的
// 如果子类要创建协议时,只要在基类遵守某一协议即可
// 在哪一个类里面 导入了协议 就在哪一个类里面 实现这个协议的方法
Animal *tianshi = [ [ Animal alloc ] init ] ;
// respondsToSelector: 判断是否能够响应一个方法
// @selector(选择的方法) 方法选择器 是用来选择方法的
BOOL r = [ tianshi respondsToSelector:@selector(hongDeng) ] ;
if ( r != NO )
{
[ tianshi hongDeng ] ;
NSLog(@"平安渡过~") ;
}
else
{
NSLog(@"碾死") ;
}
BOOL rr = [ tianshi respondsToSelector:@selector(huangDeng) ] ;
if ( rr != NO )
{
[ tianshi huangDeng ] ;
NSLog(@"安全渡过了~") ;
}
else
{
NSLog(@"被砍死") ;
}
BOOL rrr = [ tianshi respondsToSelector:@selector(lvDeng) ] ;
if ( rrr != NO )
{
[ tianshi lvDeng ] ;
NSLog(@"安全渡过去了~") ;
}
else
{
NSLog(@"被乱刀砍死") ;
}
// 练习
/*
1、八点之前 打卡 (必须得)
如果没有实现这个方法 扣3学分 罚1块钱
2、上课不能迟到(必须)
如果没实现 扣1学分 罚1块钱
3、提交每周总结(必须)
如果没有实现 扣1学分 罚1块
4、没有课上自习 (选择)
如果遵守这个协议,就涨点工资
*/
Student *LiuTingJun = [ [ Student alloc ] init ] ;
BOOL p = [ LiuTingJun respondsToSelector:@selector(daka) ] ;
if ( p != NO )
{
[ LiuTingJun daka ] ;
NSLog(@"打卡了吗") ;
}
else
{
NSLog( @"没打卡扣3个学分,罚1块钱" ) ;
}
BOOL pp = [LiuTingJun respondsToSelector:@selector(chidao) ] ;
if ( pp != NO )
{
[ LiuTingJun chidao ] ;
NSLog(@"没迟到") ;
}
else
{
NSLog( @"迟到扣1学分,罚1块钱" ) ;
}
BOOL ppp = [ LiuTingJun respondsToSelector:@selector(zongjie) ] ;
if ( ppp != NO )
{
[ LiuTingJun zongjie ] ;
NSLog(@"交了总结") ;
}
else
{
NSLog( @"没交总结扣1学分,罚1块" ) ;
}
BOOL pppp = [ LiuTingJun respondsToSelector:@selector(zixi) ] ;
if ( pppp != NO )
{
[ LiuTingJun zixi ] ;
NSLog(@"涨点工资") ;
}
else
{
NSLog( @"不涨工资" ) ;
}
}
return 0;
}
Animal.h
#import <Foundation/Foundation.h>
#import "HongLvDeng.h"
//<遵守的协议>
@interface Animal : NSArray<HongLvDeng>
@end
#import "Animal.h"
@implementation Animal
- (void)hongDeng
{
NSLog( @"趴着等红灯" ) ;
}
- (void)huangDeng
{
NSLog( @"观察路况" ) ;
}
- (void)lvDeng
{
NSLog( @"摇着尾巴跑" ) ;
}
@end
<span style="font-family: Arial, Helvetica, sans-serif;">#import <Foundation/Foundation.h></span>
#import "Lianxi.h"
@interface Student : NSArray<Lianxi>
@end
#import "Student.h"
@implementation Student
- (void)daka
{
NSLog(@"八点之前打卡" ) ;
}
- (void)chidao
{
NSLog(@"上课不能迟到") ;
}
- (void)zongjie
{
NSLog(@"每周提交总结");
}
- (void)zixi
{
NSLog(@"没课上自习");
}
@end
HongLvDeng.h
#import <Foundation/Foundation.h>
@protocol HongLvDeng <NSObject>
//协议里面默认的方法是强制实现的方法
// @required 必须强制实现 不实现 就报错
//@optional 选择实现的
- (void) hongDeng ;
- (void) lvDeng ;
- (void) huangDeng ;
@end
Lianxi.h
#import <Foundation/Foundation.h>
@protocol Lianxi <NSObject>
- (void)daka ;
- (void)chidao ;
- (void)zongjie ;
- (void)zixi ;
@end