推荐答案
在 Swift 中,代理模式通常通过定义协议(Protocol)和委托(Delegate)来实现。以下是一个简单的实现示例:
// www.javascriptcn.com code example
// 1. 定义协议
protocol TaskDelegate: AnyObject {
func taskDidStart(_ task: Task)
func taskDidFinish(_ task: Task)
}
// 2. 定义委托类
class Task {
weak var delegate: TaskDelegate?
func start() {
delegate?.taskDidStart(self)
// 执行任务逻辑
delegate?.taskDidFinish(self)
}
}
// 3. 实现协议的类
class TaskHandler: TaskDelegate {
func taskDidStart(_ task: Task) {
print("Task started")
}
func taskDidFinish(_ task: Task) {
print("Task finished")
}
}
// 4. 使用代理模式
let task = Task()
let handler = TaskHandler()
task.delegate = handler
task.start()本题详细解读
1. 定义协议
首先,我们定义一个 TaskDelegate 协议,该协议包含两个方法:taskDidStart(_:) 和 taskDidFinish(_:)。这两个方法分别在任务开始和结束时被调用。
protocol TaskDelegate: AnyObject {
func taskDidStart(_ task: Task)
func taskDidFinish(_ task: Task)
}2. 定义委托类
接下来,我们定义一个 Task 类,该类包含一个 delegate 属性,类型为 TaskDelegate?。在 start() 方法中,我们调用 delegate 的 taskDidStart(_:) 和 taskDidFinish(_:) 方法。
// www.javascriptcn.com code example
class Task {
weak var delegate: TaskDelegate?
func start() {
delegate?.taskDidStart(self)
// 执行任务逻辑
delegate?.taskDidFinish(self)
}
}3. 实现协议的类
然后,我们定义一个 TaskHandler 类,该类实现了 TaskDelegate 协议,并提供了 taskDidStart(_:) 和 taskDidFinish(_:) 方法的具体实现。
// www.javascriptcn.com code example
class TaskHandler: TaskDelegate {
func taskDidStart(_ task: Task) {
print("Task started")
}
func taskDidFinish(_ task: Task) {
print("Task finished")
}
}4. 使用代理模式
最后,我们创建一个 Task 实例和一个 TaskHandler 实例,并将 TaskHandler 实例赋值给 Task 实例的 delegate 属性。然后调用 start() 方法,触发代理方法的调用。
let task = Task() let handler = TaskHandler() task.delegate = handler task.start()
通过这种方式,我们实现了代理模式,使得 Task 类可以在特定事件发生时通知其代理对象。