渐进式编程课
Objective-C 目录
第 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;特别确认协议属性不会自动合成,类中已显式声明;未见废弃标记)。

官方参考