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.mzph.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…