Swift —— delegate 設計模式

一、什么是 delegate 模式

所謂 delegate 就是代理模式。簡單來說,delegate 模式就是在類的函數里運行完一段代碼后,你可以通過一個符合某個代理協議的屬性來調代理的方法。其中,代理方法就是回調函數。

二、delegate 模式與閉包比的優勢

如果只看 delegate 與 閉包對同一個函數的影響,其實 delegate 和閉包并沒有什么區別。但如果對于多個類來說,delegate 可以由于有一個類是專門存協議函數的實現的,因此多個函數在調同一個回調函數時,我們就不用像傳閉包那樣需要寫多個相同的閉包了,直接調代理協議里的函數就行了。

三、delegate 模式的組成

delegate 模式由 3 樣東西組成:類專用的代理協議、有符合代理協議的屬性的類、代理方法的實現的類。

四、如何實現?delegate 模式

protocol DelegateProtocol: AnyObject { // 類專屬的代理協議func sig1()func sig2()
}class Delegated { // 被代理的類weak var delegate: DelegateProtocol?func foo() {// ... 一段代碼delegate?.sig1() // 調代理方法,可以理解成回調函數的一種}
}class Delegate: DelegateProtocol { // 這個代理類就是專門存回調函數的實現的func sig1() {print("sig1")}func sig2() {print("sig2")}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75905.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux-vi和文件操作

在 Linux 系統的世界里,有一個核心思想貫穿始終,那就是 “萬物都是文件”。這一理念極大地簡化了系統資源的管理和操作,為用戶和開發者提供了統一且高效的交互方式。本文將深入探討這一理念在 Linux 文件系統中的具體體現,從硬盤分…

Endnote 21顯示字段設置與修改詳細解析(附Endnote Click)

目錄 前言字段設置與詳細解釋Endnote Click1. 安裝 Endnote Click2. 一鍵獲取Edge插件3. 安裝完成啟動插件4. 檢索期刊文獻案例5. 在 Endnote Click 我的locker中導入文獻 前言 在學術研究的漫漫征途中,高效管理參考文獻是每位學者、學生都繞不開的關鍵環節。Endno…

java使用 ?Stream 流對自定義對象數組去重的

在 Java 中,使用 Stream 流對自定義對象數組去重的核心是確保對象能正確判斷“重復”的邏輯。以下是具體實現方法及場景分析: 方法 1:直接使用 distinct()(需重寫 equals 和 hashCode) 若自定義對象已正確重寫 equals…

C++ (類的設計,對象的創建,this指針,構造函數)

類的設計 C對結構體是有增強的 可以包含函數作為結構體成員 可以直接定義變量 在結構體成員函數里面可以直接訪問結構體成員變量 struct student{string name;int age;float score;void play_game(const string &name);}void student::play_game(const string game){}…

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS》全文閱讀

《ADVANCING MATHEMATICAL REASONING IN LAN- GUAGE MODELS: THE IMPACT OF PROBLEM-SOLVING DATA, DATA SYNTHESIS METHODS, AND TRAINING STAGES》全文閱讀 提升語言模型中的數學推理能力:問題求解數據、數據合成方法及訓練階段的影響 \begin{abstract} 數學推…

網絡測試工具:涵蓋網絡測速、密碼查看、故障判斷與網絡監測

在網絡管理與維護的廣闊領域中,網絡測試工具扮演著至關重要的角色。它們不僅簡化了復雜的網絡診斷流程,還提升了工作效率。今天推薦一款包含功能全面的網絡測試工具:InetTest,是一款免費且開源的網絡測試工具,適用于Wi…

小剛說C語言刷題——1005 - 已知一個圓的半徑,求解該圓的面積和周長

1.題目描述 已知一個圓的半徑,求解該圓的面積和周長。 輸入 輸入只有一行,只有 1個整數。 輸出 輸出只有兩行,一行面積,一行周長。(保留兩位小數)。 令 pi3.1415926。 樣例 輸入 1 輸出 3.14 6.…

【算法】快速排序

算法系列六:快速排序 一、快速排序的遞歸探尋 1.思路 2.書寫 3.搭建 3.1設計過掉不符情況(在最底層時) 3.2查驗能實現基礎結果(在最底層往上點時) 3.3跳轉結果繼續往上回搭 4.實質 二、快速排序里的基準排序 …

SoapUI 4.6.4(32位)下載安裝教程 - 兼容老舊Windows系統

SoapUI 4.6.4(32位版) 是個老版本的測試工具,專門給 32位 Windows 電腦 用的。現在最新版都是 64 位的了,但如果你還在用老系統,可能還得找這個舊版。 SoapUI 4.6.4工具下載:https://pan.quark.cn/s/c07381db8102 這…

【AI量化第24篇】KhQuant 策略框架深度解析:讓策略開發回歸本質——基于miniQMT的量化交易回測系統開發實記

我是Mr.看海,我在嘗試用信號處理的知識積累和思考方式做量化交易,應用深度學習和AI實現股票自動交易,目的是實現財務自由~ 目前我正在開發基于miniQMT的量化交易系統——看海量化交易系統。 本篇要講到量化的核心了——策略。說白了每個投資者…

Java面試黃金寶典48

1. C++ 的拷貝構造函數,深拷貝和淺拷貝 定義 拷貝構造函數:在 C++ 里,拷貝構造函數屬于特殊的構造函數,其功能是使用一個已存在的對象來初始化一個新對象。當對象以值傳遞的方式作為參數傳給函數、函數返回對象、用一個對象初始化另一個對象時,拷貝構造函數會被調用。淺拷…

OpenCV學習之獲取圖像所有點的坐標位置(二)

1.功能介紹 (1)使用openCV解析了.jpeg、.jpg、.png格式的圖像文件,輸出了圖像的寬、高、通道數; (2)創建txt格式文件,保存圖像中各像素點的rgba值。 2.環境介紹 操作系統:window10 開發語言:visual studio 2015 c++ 3.功能實現過程 3.1環境設置 (1)打開Vs2015…

B2B2C多用戶商城平臺 的兩種創新玩法

以前隨便搞個淘寶京東那樣的商城就能躺著賺錢的日子早過去了!現在市面上各種電商玩法花樣百出:小紅書那種刷著刷著就下單的"種草"電商,拼多多那種"幫我砍一刀"的社交電商,還有抖音快手那種看著視頻突然就想買…

【Bluedroid】A2DP Sink播放流程源碼分析(二)

接上一篇繼續分析:【Bluedroid】A2DP Sink播放流程源碼分析(一)_安卓a2dp sink播放流程-CSDN博客 AVDTP接收端(Sink)流事件處理 bta_av_sink_data_cback 是 Bluedroid 中 A2DP Sink 角色的 AVDTP 數據回調函數,負責處理接收端的…

抗量子算法驗證工具

抗量子算法計算工具 抗量子算法驗證工具ML-KEMML-DSASLH-DSA 抗量子算法驗證工具 2024年末,美國NIST陸續公布了FIPS-203、FIPS-204、FIPS-205算法標準文檔,抽空學習了一下,做了個算法計算工具。 ML-KEM ML-DSA SLH-DSA 需要的朋友可留言交流…

2025年PMP考試有哪些變化?難點在哪里?

PMP(項目管理專業人士資格認證)考試因其廣泛的行業認可度和實用性,成為許多專業人士提升職業競爭力的重要選擇。然而,對于初次接觸PMP考試的考生來說,其廣度與深度的平衡、理論與實踐的結合,以及跨文化思維…

Docker學習筆記-docker安裝、刪除

一、在centOS 7中docker的默認安裝目錄 # Docker 主配置文件目錄 ls /etc/docker# Docker 數據目錄(鏡像、容器、卷等) ls /var/lib/docker# Docker 可執行文件路徑 which docker # 輸出類似 /usr/bin/docker 二、docker文件目錄說明 目錄/文件用途/…

MATLAB求和∑怎么用?

MATLAB求和∑怎么用? 一:題目:求下列方程的和 二、代碼如下 1.syms函數 (方法一) 代碼如下(示例): 1. syms x 2. symsum((x.^22*x).^3,1,100) 3. 2.直接用循環 (方法二) 代碼如下&am…

每日算法-鏈表(2.兩數相加、24.兩兩交換鏈表中的節點、143.重排鏈表)

一.兩數相加 1.1題目描述 1.2題解思路 定義兩個指針l1,l2依次遍歷兩個鏈表,用變量add存儲l1加l2的值,將add的個位數取出來充當新節點的值,然后將add的個位數刪去,即add /10,循環此操作。 重點分析: 1.跟…

Flutter學習 滾動組件(1):ListView基本使用

目錄 一、ListView構造方法1.1 常規方法1.2 ListView.builder1.3 ListView.separated 二、自定義ListView樣式和布局:三、ListView性能優化:總結: 一、ListView構造方法 主要以下幾種方法: 常規方法,直接使用默認的構…