Swift基礎知識:28.Swift協議

在 Swift 中,協議(protocol)是一種定義方法、屬性和其他特定任務的藍圖。類、結構體或枚舉可以遵循(adopt)協議,從而提供所需的功能。協議定義了一組要求,遵循協議的類型需要提供對應的功能實現。

定義協議

使用關鍵字 protocol 來定義一個協議。協議可以包含方法、屬性、下標、以及其他協議等。

示例:

protocol FullyNamed {var fullName: String { get }
}

遵循協議

使用 classstructenum 關鍵字后面跟著協議名來表示該類型遵循了該協議。

示例:

struct Person: FullyNamed {var fullName: String
}

屬性要求

協議可以要求遵循協議的類型提供特定的屬性,并指定這些屬性是只讀的還是可讀寫的。

示例:

protocol SomeProtocol {var readOnlyProperty: Int { get }var readWriteProperty: String { get set }
}

方法要求

協議可以要求遵循協議的類型實現特定的方法。

示例:

protocol RandomNumberGenerator {func random() -> Double
}

擴展協議

協議可以通過擴展來提供方法和屬性的默認實現。

示例:

extension RandomNumberGenerator {func randomBool() -> Bool {return random() > 0.5}
}

協議組合

可以使用協議組合來要求一個類型遵循多個協議。

示例:

protocol Named {var name: String { get }
}
protocol Aged {var age: Int { get }
}
func wishHappyBirthday(to celebrator: Named & Aged) {print("Happy birthday, \(celebrator.name), you're \(celebrator.age)!")
}

在 Swift 中,協議是非常靈活和強大的,它可以用于定義接口、多態和代碼復用。通過協議,我們可以定義出清晰的抽象接口,使得代碼更加模塊化和可復用。

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

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

相關文章

LED景觀照明燈驅動電路串聯、并聯和恒流3款方案

LED景觀照明燈是現代城市照明中常見的一種燈具。為了保證LED景觀照明燈的正常工作,需要設計合適的驅動電路。LED景觀照明燈的驅動電路可以采用串聯、并聯或恒流的方式來設計。 首先,串聯驅動電路是指將多個LED燈串聯在一起,然后接入電源進行…

【Spring】常見問題總結

目錄 1. 什么是 Spring 框架? 2. 列舉一些重要的Spring模塊? 3. RestController vs Controller 4. Spring IOC & AOP 4.1 談談自己對于 Spring IoC 和 AOP 的理解 IoC AOP 4.2 Spring AOP 和 AspectJ AOP 有什么區別? 5. Spring bean 5.1…

C語言第二十九彈---浮點數在內存中的存儲

?個人主頁: 熬夜學編程的小林 💗系列專欄: 【C語言詳解】 【數據結構詳解】 目錄 1、浮點數在內存中的存儲 1.1、練習 1.2、浮點數怎么轉化為二進制 1.3、浮點數的存儲 1.3.1、浮點數存的過程 1.3.2、浮點數取的過程 1.3、題目解析…

FPGA領域頂級學術會議

FPGA領域頂級學術會議主要有FPGA,FCCM,FPL和FPT。 1 FPGA 會議全名是: ACM/SIGDA International Symposium on Field-Programmable Gate Arrays 網站是:https://dl.acm.org/conference/fpga FPGA常年在美國舉辦,每年2月,偏FPGA基礎研究; 該會議的論文免費下載。這個比…

【MATLAB源碼-第144期】基于matlab的蝴蝶優化算法(BOA)無人機三維路徑規劃,輸出做短路徑圖和適應度曲線。

操作環境: MATLAB 2022a 1、算法描述 ?蝴蝶優化算法(Butterfly Optimization Algorithm, BOA)是基于蝴蝶覓食行為的一種新穎的群體智能算法。它通過模擬蝴蝶個體在尋找食物過程中的嗅覺導向行為以及隨機飛行行為,來探索解空間…

vue3前端項目開發,具備純天然的防止爬蟲采集的特征

vue3前端項目開發,具備純天然的防止爬蟲采集的特征!眾所周知,網絡爬蟲可以在網上爬取到一些數據,很多公司,為了自己公司的數據安全, 尤其是web端項目,不希望被爬蟲采集。那么,您可以使用vue技術…

spark ui的job數,stage數以及task數

背景 我們在查看spark ui的界面時,一段spark sql的執行經常看到會有對應有幾個job,然后每個job又有幾個stage,而每個stage又有好多個task,那么這些job,stage,task是怎么和spark 算子對應的呢 算子和job數,stage數以及task數的對…

代碼隨想錄算法訓練營29期|day59 任務以及具體安排

第九章 動態規劃part16 583. 兩個字符串的刪除操作 // dp數組中存儲word1和word2最長相同子序列的長度 class Solution {public int minDistance(String word1, String word2) {int len1 word1.length();int len2 word2.length();int[][] dp new int[len1 1][len2 1];for …

Gartner信息圖:2024 年44種安全和風險管理技術采用路線圖

Gartner發布的該信息圖確定了全球企業正在采用的 44 種安全相關技術,并根據采用階段、部署風險和企業價值對它們進行了映射。安全和風險管理領導者可以使用此信息圖將他們的技術投資與同行進行比較。 2024 年安全和風險管理技術采用路線圖 SRM 領導者可以使用此信息…

世微AP8P059 靜態功耗小 太陽能人體紅外線感應IC

概述 AP8P059 是一款集成低壓 LDO 、光 控、充電控制、過充保護、欠壓保護、 PIR 感應、延時為一體的人體感應太陽能 LED 燈控制芯片,只需要很少的外接元件,適 用于鋰電池供電的 PIR 人體感應 LED 燈具 的應用。 外置的一級帶通增益放大 器便…

Python實現視頻轉音頻、音頻轉文本的最佳方法

文章目錄 Python實現視頻轉音頻和音頻轉文字視頻轉音頻步驟 1:導入moviepy庫步驟 2:選擇視頻文件步驟 3:創建VideoFileClip對象步驟 4:提取音頻步驟 5:保存音頻文件 音頻轉文字步驟 1:導入SpeechRecognitio…

RV新聞概要 --- 2024/02/23

來源:https://mp.weixin.qq.com/s/EEJVLQnXvgQTbtU_yrW9lw 晶心科技是一家上市公司(TWSE:6533;SIN:US03420C2089;ISIN:US03420C1099),已有18 年的經營歷史,是…

單向循環鏈表的操作

main函數: #ifndef __loopLinkList_H__#define __loopLinkList_H__typedef int datatype;union msg{ //若數據的類型也為int,則不需要這個聯合體datatype data;int len; //放頭結點,記錄鏈表長度};typedef struct node{union msg te…

Istio實戰:Istio Kiali部署與驗證

目錄 前言一、Istio安裝小插曲 注意事項 二、Kiali安裝三、Istio測試參考資料 前言 前幾天我就開始搗騰Istio。前幾天在執行istioctl install --set profiledemo -y 的時候老是在第二步就報錯了,開始我用的istio版本是1.6.8。 后面查看k8s與istio的版本對應關系后發…

vCenter、vSphere Client硬盤擴容詳解

文章目錄 1、需求2、vSphere 操作流程3、服務器操作3.1、查看分區空間大小3.2、列出所有可用塊設備的信息3.3、新建分區3.4、重讀分區表信息3.5、格式化分區信息3.6、查看卷組的詳細狀態3.7、創建物理卷3.8、擴容卷組3.9、邏輯卷在線擴容3.10、顯示物理卷屬性3.11、XFS 文件系統…

最少停車數(C 語言)

題目描述 特定大小的停車場,數組cars[]表示,其中1表示有車,0表示沒車。車輛大小不一,小車占一個車位(長度1),貨車占兩個車位(長度2),卡車占三個車位&#xf…

Rollup + Ts

Rollup Ts RollupTs demo 一、文件配置 | - src | | - utils | | | - .ts | | - .babelrc | | - main.js | | - style.css | - package.json | - rollup.config.js | - tsconfig.json二、插件下載 rollup // rollup 基本的包 typescript // ts 包 rollup/plug…

如何做bug分析 ?bug分析什么 ? 為什么要做bug分析 ?

每當我們完成一個版本測試時,總會在測試報告中添加一些分析bug的指標 ,主要用于分析在測試過程中存在的問題 。但是在分析的過程中你就可能遇到如下的問題 : 我應該分析那些指標呢 ?每一個具體的指標該如何分析 ?它能說…

Vue3學習——computed、watch、watchEffect

computed 與Vue2.x中computed配置功能一致寫法 import {computed} from vuesetup(){...//計算屬性——簡寫let fullName computed(()>{return person.firstName - person.lastName})//計算屬性——完整let fullName computed({get()return person.firstName - perso…

算法——模擬

1. 什么是模擬算法? 官方一點來說 模擬算法(Simulation Algorithm)是一種通過模擬現實或抽象系統的運行過程來研究、分析或解決問題的方法。它通常涉及創建一個模型,模擬系統中的各種事件和過程,以便觀察系統的行為&a…