oc65--协议应用1,接口.做数据类型限定

简介:
复制代码
//  WifeCondition.h

#import <Foundation/Foundation.h>

@protocol WifeCondition <NSObject>
// 会做饭
- (void)cooking;
// 会洗衣服
- (void)washing;
// 有一份好工作
- (void)job;
@end
复制代码
复制代码
//  Person.h

#import <Foundation/Foundation.h>
#import "Wife.h"

@interface Person : NSObject

// 媳妇
// 注意: 记住一点, 类型限定是写在数据类型的右边的,协议修饰成员变量
@property (nonatomic, strong) Wife<WifeCondition> *wife;

- (void)show;

@end
复制代码
复制代码
//  Person.m


#import "Person.h"

@implementation Person

- (void)show
{
//    注意: 虽然在接受某一个对象的时候, 对这个对象进行了类型限定(限定它必须实现某个协议), 但是并不意味着这个对象就真正的实现了该方法. 所以每次在调用对象的协议方法时应该进行一次验证
    
    if ([self.wife respondsToSelector:@selector(cooking)]) {  //验证对象有没有实现这个方法
        
        [self.wife cooking];
    }
    
    if ([self.wife respondsToSelector:@selector(washing)]) {
        
        [self.wife washing];
    }
    
    if ([self.wife respondsToSelector:@selector(job)]) {
        
        [self.wife job];
    }
}
@end
复制代码
复制代码
//  Wife.h

#import <Foundation/Foundation.h>
#import "WifeCondition.h"

@interface Wife : NSObject <WifeCondition>    //协议就是写了接口的声明

@end
复制代码
复制代码
//  Wife.m

#import "Wife.h"

@implementation Wife
// 会做饭
- (void)cooking
{
    NSLog(@"%s", __func__);
}
// 会洗衣服
- (void)washing
{
    NSLog(@"%s", __func__);
}
// 有一份好工作
- (void)job
{
    NSLog(@"%s", __func__);
}
@end
复制代码
复制代码
//
//  main.m
//  协议的应用场景1-类型限定

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Wife.h"
#import "WifeCondition.h"  //导入.h文件,就是导包。

int main(int argc, const char * argv[]) {

    Person *p = [Person new];
    // 1.协议的第一个应用场景, 可以将协议写在数据类型的右边, 明确的标注如果想给该变量赋值, 那么该对象必须遵守某个协议
//    Wife<WifeCondition> *w = [Wife new];
    
    Wife *w = [Wife new];
    p.wife = w;
    
    [p show];
    
    return 0;
}
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7437090.html,如需转载请自行联系原作者
相关文章
|
存储 人工智能
我爱啃书--线性表的链式存储结构(大话数据结构)
我爱啃书--线性表的链式存储结构(大话数据结构)
193 0
|
安全 数据可视化 大数据
下一代防火墙 突破于威胁可视化
本文讲的是 下一代防火墙 突破于威胁可视化,知名咨询机构IDC对下一代防火墙(NGFW)定义了五方面的核心安全能力:对应用、用户、内容的精细化识别与管控,一体化安全引擎,外部智能,全网可视化和高性能架构。
1405 0
|
6天前
|
人工智能 运维 安全
|
4天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
531 14
|
11天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
897 109
|
5天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。