第 18 课2026.09.24
让调用方只依赖摘要契约,而不必知道对象的具体类。
第 18 课:让 Lesson 采纳摘要协议
- 日期:2026-09-24
- 课程序号:第 18 课
- 知识点:类的协议采纳
用途或适用场景
让调用方只依赖摘要契约,而不必知道对象的具体类。
核心概念
类声明中的 <LessonSummarizing> 表示采纳协议;类需实现其要求的 displaySummary getter。
最小代码或操作示例
objective-c
#import <Foundation/Foundation.h>
@protocol LessonSummarizing <NSObject>
@property (nonatomic, readonly, copy) NSString *displaySummary;
@end
@interface Lesson : NSObject <LessonSummarizing>
@property (nonatomic, copy, readonly) NSString *title;
@property (nonatomic, readonly) NSInteger minutes;
- (NSString *)summary;
@end
@implementation Lesson
- (NSString *)summary {
return [NSString stringWithFormat:@"%@ · %ld 分钟", self.title, (long)self.minutes];
}
- (NSString *)displaySummary { return [self summary]; }
@end3~5 分钟练习
声明 id<LessonSummarizing> item = [Lesson new];,读取 item.displaySummary。
参考答案
编译器允许通过协议类型读取该属性;运行前还需按既有初始化流程设置标题与时长。
与上一课的联系
沿用第 17 课的协议与第 15 课的 displaySummary getter;本课只在 Lesson 类声明中采纳协议,已有摘要格式化逻辑不变;完成后下一课可让另一个展示对象实现同一协议。
时效校验
时效校验:2026-09-24(Apple Objective-C 官方 Working with Protocols;类采纳协议及必需 getter 的规则未见废弃标记)。