第 19 课2026.09.28
课程卡片和上一课的 Lesson 使用同一摘要读取接口。
第 19 课:让第二个对象实现摘要协议
- 日期:2026-09-28
- 课程序号:第 19 课
- 知识点:多个类采纳同一协议
用途或适用场景
课程卡片和上一课的 Lesson 使用同一摘要读取接口。
核心概念
LessonSummarizing 只要求 displaySummary,不要求实现类使用相同字段;第二个类可以直接保存展示文字。协议属性不会自动合成,类需显式声明属性或实现 getter。
最小代码或操作示例
objective-c
// 沿用第 17 课的 LessonSummarizing 协议。
@interface LessonCard : NSObject <LessonSummarizing>
@property (nonatomic, copy) NSString *displaySummary;
@end
@implementation LessonCard
@end
LessonCard *card = [LessonCard new];
card.displaySummary = @"Objective-C · 5 分钟";
id<LessonSummarizing> item = card;
NSLog(@"%@", item.displaySummary);3~5 分钟练习
把 item 指向第 18 课已经初始化的 Lesson 实例,再读取同一属性。
参考答案
id<LessonSummarizing> item = lesson; NSLog(@"%@", item.displaySummary);。两种对象都满足同一读取契约,格式可不同。
与上一课的联系
沿用第 18 课的 LessonSummarizing 与 Lesson.displaySummary;本课只新增 LessonCard 作为第二个采纳者;下一课可让同一个展示函数接收任意 id<LessonSummarizing>。
时效校验
时效校验:2026-09-28(已核对 Apple Objective-C 官方 Working with Protocols;特别确认协议属性不会自动合成,类中已显式声明;未见废弃标记)。