Objective-C入门15:协议

本文介绍了Objective-C中的协议概念,包括如何定义和使用协议,通过实例展示了如何在一个类中实现协议规定的方法,并演示了如何检查一个对象是否实现了特定的协议方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


Animal.m
#import "Animal.h"

@implementation Animal


 - (void)hongDeng
{
    NSLog( @"趴着等红灯" ) ;
}

 - (void)huangDeng
{
    NSLog( @"观察路况" ) ;
}

 - (void)lvDeng
{
    NSLog( @"摇着尾巴跑" ) ;
}

@end



Student.h
<span style="font-family: Arial, Helvetica, sans-serif;">#import <Foundation/Foundation.h></span>
#import "Lianxi.h"

@interface Student : NSArray<Lianxi>

@end


Student.m

#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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值