Swift 中如何实现代理模式?

推荐答案

在 Swift 中,代理模式通常通过定义协议(Protocol)和委托(Delegate)来实现。以下是一个简单的实现示例:

-- -------------------- ---- -------
-- -- ----
-------- ------------- --------- -
    ---- -------------- ----- -----
    ---- --------------- ----- -----
-

-- -- -----
----- ---- -
    ---- --- --------- -------------
    
    ---- ------- -
        ----------------------------
        -- ------
        -----------------------------
    -
-

-- -- ------
----- ------------ ------------ -
    ---- -------------- ----- ----- -
        ----------- ---------
    -
    
    ---- --------------- ----- ----- -
        ----------- ----------
    -
-

-- -- ------
--- ---- - ------
--- ------- - -------------
------------- - -------
------------
展开代码

本题详细解读

1. 定义协议

首先,我们定义一个 TaskDelegate 协议,该协议包含两个方法:taskDidStart(_:)taskDidFinish(_:)。这两个方法分别在任务开始和结束时被调用。

2. 定义委托类

接下来,我们定义一个 Task 类,该类包含一个 delegate 属性,类型为 TaskDelegate?。在 start() 方法中,我们调用 delegatetaskDidStart(_:)taskDidFinish(_:) 方法。

-- -------------------- ---- -------
----- ---- -
    ---- --- --------- -------------
    
    ---- ------- -
        ----------------------------
        -- ------
        -----------------------------
    -
-
展开代码

3. 实现协议的类

然后,我们定义一个 TaskHandler 类,该类实现了 TaskDelegate 协议,并提供了 taskDidStart(_:)taskDidFinish(_:) 方法的具体实现。

-- -------------------- ---- -------
----- ------------ ------------ -
    ---- -------------- ----- ----- -
        ----------- ---------
    -
    
    ---- --------------- ----- ----- -
        ----------- ----------
    -
-
展开代码

4. 使用代理模式

最后,我们创建一个 Task 实例和一个 TaskHandler 实例,并将 TaskHandler 实例赋值给 Task 实例的 delegate 属性。然后调用 start() 方法,触发代理方法的调用。

通过这种方式,我们实现了代理模式,使得 Task 类可以在特定事件发生时通知其代理对象。

纠错
反馈

纠错反馈