单独创建一个协议文件的意义

对于协议,感觉自己常用的就是 回调传值,再有就是面试的时候可能遇到过面试官提出的这样一个问题,iOS 如何实现多继承?
但是,经常在一些SDK或者第三方碰到一个单独的协议文件,有时候就有些迷糊,这样是干啥呢?就算遵守这个协议,那也没有实现触发方法啥的啊?

单独创建一个协议文件有什么意义呢?

我个人感觉就是用来解耦合的,虽然它单独创建了一个协议文件,但是它归根结底还是协议,只是单独创建出来,便于其他类来使用了而已
segmentfault中我还看到过这样一段解答,感觉说的也非常好

协议是抽象的,只是描述不同事物的一些共性,比如说飞吧, 飞机和鸟都会飞,他们都实现了飞协议,但是他俩的实现方式是不一样的,那么飞这个协议是不是就应该单独定义呢?有一天可能人也会飞了,那么人去实现飞协议就可以了


通过协议提供匿名对象

《编写高质量iOS与OS X代码的52个有效方法》的第28条中是这样来介绍的

  • 用协议把自己所写的api之中的实现细节隐藏起来,将返回的对象设计为遵从此协议的纯id类型
  • 接口背后有多个不同的实现类,而又不想指名具体哪个使用类
例:有三个不同的接口和模型,
  • 班级学生模型 ClassStudentModel
  • 年级学生模型 GradeStudentModel
  • 学校学生模型 SchoolStudentModel

此时需要在个人中心页面中展示学生信息,内容可能来自于任意一个模型,这个时候在页面传递参数用哪个模型都不合适

两种方式解决

  • 1、以前的话自己单独再创建一个模型,将传递的值一一赋值到新模型
  • 2、通过协议提供匿名对象方式
普通方式
匿名对象方式

文件目录


文件目录.jpg

模型类

// 班级类
@interface ClassStudentModel : NSObject <PersonDelegate>

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *age;
@property (nonatomic, strong) NSString *sex;

@end

// 年级类
@interface GradeStudentModel : NSObject <PersonDelegate>

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *age;
@property (nonatomic, strong) NSString *sex;

@end

// 学校类
@interface SchoolStudentModel : NSObject <PersonDelegate>

@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *age;
@property (nonatomic, strong) NSString *sex;

@end

协议文件(注意,方法中的名称需要与模型名一致)

@protocol PersonDelegate <NSObject>

- (NSString *)name;
- (NSString *)age;
- (NSString *)sex;

@end

传值

- (void)presenViewController {
    ClassStudentModel *classModel = [[ClassStudentModel alloc] init];
    classModel.name = @"yanghuixue";
    classModel.age = @"26";
    classModel.sex = @"女";
    
    //    GradeStudentModel *gradeModel = [[GradeStudentModel alloc] init];
    //    gradeModel.name = @"qiangzi";
    //    gradeModel.age = @"25";
    //    gradeModel.sex = @"男";
    
    PersonViewController *personVC = [[PersonViewController alloc] init];
    id <PersonDelegate> delegate = classModel;
    personVC.delegate = delegate;
    [self presentViewController:personVC animated:YES completion:nil];
}

这里应该着重说一下,参数的类型为 id <PersonDelegate>,所以任何类型的对象都能充当这一参数,只要其遵循PersonDelegate即可,这也就是在前面图中展示,匿名对象传值方式的优点


展示

@interface PersonViewController : UIViewController

@property (nonatomic, strong) id <PersonDelegate> delegate;

@end


@implementation PersonViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSLog(@"name = %@", self.delegate.name);
    NSLog(@"age = %@", self.delegate.age);
    NSLog(@"sex = %@", self.delegate.sex);
}

@end
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,601评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,367评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,249评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,539评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,967评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,929评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,098评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,825评论 0 207
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,609评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,796评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,282评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,603评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,277评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,159评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,959评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,079评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,874评论 2 277

推荐阅读更多精彩内容