MST
星途 面试题库

面试题:Swift 中协议扩展的应用场景及示例

请阐述 Swift 中协议扩展的主要应用场景,并编写一个简单的示例代码,展示如何通过协议扩展为一组类型添加通用功能。
30.3万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试

协议扩展的主要应用场景

  1. 为遵循协议的类型提供默认实现:当多个类型遵循同一个协议时,可以通过协议扩展为这些类型提供通用的默认实现,减少代码重复。例如,在多个视图控制器遵循一个特定的视图加载协议时,可在协议扩展中提供通用的加载逻辑。
  2. 添加新功能到已有类型:即便类型已经实现,只要该类型遵循某个协议,就可以通过协议扩展为其添加新功能。比如为 IntString 等标准库类型添加自定义功能。
  3. 实现协议之间的关联:当多个协议存在一定关联时,通过协议扩展可以更方便地在遵循这些协议的类型上统一实现关联逻辑。

示例代码

// 定义一个协议
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 结构体本身没有显式实现该方法。