使用協議作為可組合擴充套件

2021-09-11 16:36:53 字數 1913 閱讀 6441

原文: using protocols as composable extensions

今天我們將會談論使用協議作為我們的檢視控制器的可組合部分。協議和協議擴充套件是我第二喜歡的swift的特性,僅次於可選值。它幫助我們建立高可用的可組合與可重用的**,而不需要繼承。多年來,我們一直使用繼承作為**程式設計標準。但是它真的好麼?讓我們看一下乙個簡單的baseviewcontroller,我們在每乙個檔案中都使用它。

import uikit

class baseviewcontroller: uiviewcontroller

func presenactivity()

func dismissactivity()

func present(_ error: error)

}複製**

我們的baseviewcontroller在同乙個地方實現了所有的特性,打破了單一職責原則。過了一段時間後,它將變得非常的臃腫,這會變得難以理解,並且難以進行覆蓋測試。

讓我們回到我們的主題。協議怎麼能幫助我們解決問題?讓我們開始宣告乙個activitypresentable協議來呈現和消失乙個活動指示器。

protocol activitypresentable 

extension activitypresentable where self: uiviewcontroller else

}func dismissactivity()

func findactivity() -> uiactivityindicatorview? .first

}}複製**

我們提取presentactivity和dismissactivity方法到乙個特定的協議型別中。對於採用此協議的type為viewcontroller的情況,我們通過協議擴充套件來新增預設的實現。它給我們乙個可以在我們的協議中使用viewcontroller的方法和屬性的機會。

讓我們為錯誤處理邏輯做相同的操作。

protocol errorpresentable 

extension errorpresentable where self: uiviewcontroller

}複製**

現在我們有了兩個可重用的協議型別,它們都遵守單一職責原則。我們可以為任何需要這些功能的viewcontroller新增這個擴充套件。好的事情是我們可以為需要的viewcontroller新增單一的擴充套件,並且不用繼承所有的baseviewcontroller的功能。下面是使用這些協議的例子:

class viewcontroller: uiviewcontroller 

}extension viewcontroller: activitypresentable, errorpresentable {}

複製**

另乙個機會是我們可以輕易的去忽略協議的預設實現,去為某些viewcontroller實現我們自定義的檢視指示器。讓我們看下面這個例子:

class customviewcontroller: uiviewcontroller 

}extension customviewcontroller: activitypresentable

func dismissactivity()

}複製**

當為customviewcontroller實現activitypresentable協議的時候,我們指定presentactivity和dismissactivity方法的自定義實現。

就像你看到的那樣,我們可以將協議用作viewcontroller型別的簡單擴充套件。在未來的文章中,我們將會繼續使用協議去為viewcontroller構建可重用的模組。我們將會接觸可關聯的型別和條件一致性功能,以便為viewcontroller開發更通用的基於資料的擴充套件。

求教 可組合的網路協議設計與實現

賴勇浩 這需要對我們的應用協議進行改造 只能開放 8001 8010 總共 10 個埠給應用伺服器程式,申請開放更多埠是非常麻煩的,所以需要自己實現乙個埠 pf 協議 3 作為乙個網遊,客戶端和伺服器端的通訊必須加密,所以需要實現安全協議 sec 這些協議都很簡單,實現起來也在我的能力範圍之內,所以...

通過迭代器為序列建立可組合的API

通常,對於乙個集合的操作會封裝多個邏輯 如果將這些邏輯全部寫在乙個迴圈裡面,那麼邏輯本身的可重用性就大打折扣。如果講每個邏輯都單獨寫個迴圈,那麼程式的效能就會收到影響。那麼該如何做呢?幸好有延遲執行 deffered execution model 模型。如下。class program forea...

15 第十五章 建立可組合函式庫

15 第十五章 建立可組合函式庫 本章介紹 設計函式式連線符庫 處理時變值 組合時變值與繪圖 開發金融合同模型庫 函式式程式設計表現出來的很多方面的設計原則,是可組合性 compositionality 這意味著,可以使用組合操作,從幾個基元構建出複雜的結構。我們將描述一般意義上的可組合化,因為它可...