面试题答案
一键面试协议扩展的主要应用场景
- 为遵循协议的类型提供默认实现:当多个类型遵循同一个协议时,可以通过协议扩展为这些类型提供通用的默认实现,减少代码重复。例如,在多个视图控制器遵循一个特定的视图加载协议时,可在协议扩展中提供通用的加载逻辑。
- 添加新功能到已有类型:即便类型已经实现,只要该类型遵循某个协议,就可以通过协议扩展为其添加新功能。比如为
Int
、String
等标准库类型添加自定义功能。 - 实现协议之间的关联:当多个协议存在一定关联时,通过协议扩展可以更方便地在遵循这些协议的类型上统一实现关联逻辑。
示例代码
// 定义一个协议
protocol Printable {
func printDescription()
}
// 协议扩展为遵循协议的类型提供默认实现
extension Printable {
func printDescription() {
print("This is a default description.")
}
}
// 结构体遵循 Printable 协议
struct MyStruct: Printable {}
// 创建结构体实例
let myStruct = MyStruct()
// 调用协议扩展提供的默认方法
myStruct.printDescription()
在上述代码中,首先定义了 Printable
协议,然后通过协议扩展为该协议提供了默认的 printDescription
方法实现。MyStruct
结构体遵循 Printable
协议,由于协议扩展的存在,MyStruct
结构体实例可以直接调用 printDescription
方法,即使 MyStruct
结构体本身没有显式实现该方法。