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