# 委托模式（Delegate）

URL: https://caijiao.org/swift/08-protocol-oriented/02-delegate
Source: docs/swift/08-protocol-oriented/02-delegate.md
Description: 本章介绍 Swift 中委托模式（Delegate），讲解如何通过协议实现对象间的通信和解耦，提升代码复用性和灵活性。

委托模式是一种设计模式，通过协议定义回调接口，实现对象间的通信和行为定制。

## 定义委托协议

先定义一个协议，声明委托方法：

```swift
protocol TaskDelegate: AnyObject {
    func taskDidFinish()
}
````

使用 `AnyObject` 限制协议只能被类遵循，方便弱引用避免循环引用。

## 实现委托协议

被委托类实现协议：

```swift
class Worker {
    weak var delegate: TaskDelegate?

    func startTask() {
        print("任务开始")
        // 任务执行完毕，通知委托
        delegate?.taskDidFinish()
    }
}
```

## 委托者遵循协议

委托者实现协议方法：

```swift
class Manager: TaskDelegate {
    func taskDidFinish() {
        print("任务完成，收到通知")
    }
}

let manager = Manager()
let worker = Worker()
worker.delegate = manager
worker.startTask()
// 输出：
// 任务开始
// 任务完成，收到通知
```

委托模式解耦发送者和接收者，提高代码灵活性和可维护性。
