Swift基础知识:28.Swift协议

news/2024/7/20 21:24:41 标签: swift, 开发语言, ios

在 Swift 中,协议(protocol)是一种定义方法、属性和其他特定任务的蓝图。类、结构体或枚举可以遵循(adopt)协议,从而提供所需的功能。协议定义了一组要求,遵循协议的类型需要提供对应的功能实现。

定义协议

使用关键字 protocol 来定义一个协议。协议可以包含方法、属性、下标、以及其他协议等。

示例:

swift">protocol FullyNamed {
    var fullName: String { get }
}

遵循协议

使用 classstructenum 关键字后面跟着协议名来表示该类型遵循了该协议。

示例:

swift">struct Person: FullyNamed {
    var fullName: String
}

属性要求

协议可以要求遵循协议的类型提供特定的属性,并指定这些属性是只读的还是可读写的。

示例:

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

方法要求

协议可以要求遵循协议的类型实现特定的方法。

示例:

swift">protocol RandomNumberGenerator {
    func random() -> Double
}

扩展协议

协议可以通过扩展来提供方法和属性的默认实现。

示例:

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

协议组合

可以使用协议组合来要求一个类型遵循多个协议。

示例:

swift">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.niftyadmin.cn/n/5385342.html

相关文章

阿里云的流量价格表_2024阿里云服务器流量费用表

阿里云服务器宽带按使用流量怎么收费的?价格为0.8元/GB,地域不同流量价格也不同,北京、杭州、上海、深圳等中国大陆地域是0.8元每GB,中国香港是1元/GB,美国流量0.5元1GB、日本流量0.6元、韩国流量0.8元,阿里…

在Win系统部署WampServer并实现公网访问本地服务【内网穿透】

目录 推荐 前言 1.WampServer下载安装 2.WampServer启动 3.安装cpolar内网穿透 3.1 注册账号 3.2 下载cpolar客户端 3.3 登录cpolar web ui管理界面 3.4 创建公网地址 4.固定公网地址访问 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂&#xff0…

数据挖掘-Weka的安装与使用

目录 一、下载与安装 1.下载 2.安装 二、启动以及初步使用 三、其他教程 1.weka环境变量的配置 2.weka更详细的使用教程! 一、下载与安装 1.下载

jmeter 命令行启动 动态参数化

[Jmeter命令行参数] 一、在linux中,使用非gui的方式执行jmeter。若需更改参数,必须先编辑jmx文件,找到对应的变量进行修改,比较麻烦。因此,可以参数化一些常用的变量,直接在Jmeter命令行进行设置 二、参数…

开源大数据管理平台

目前两大开源大数据平台CDH和HDP已闭源,国内也涌现出了一些开源的大数据平台,比如:apache bigtop 和 DataSophon。当前这两个产品都是完全开源的,并且这两个项目提供了源码和编译文档自助可控。 一、apache bigtop 项目地址&…

IntelliJ IDEA 2023:创新不止步,开发更自由 mac/win版

IntelliJ IDEA 2023激活版是一款强大而智能的集成开发环境(IDE),为开发者提供了一系列先进的功能和工具,帮助他们更高效地编写、调试和测试代码。 IntelliJ IDEA 2023获取 IntelliJ IDEA 2023继承了其前代版本的优秀基因,并在此基础上进行了…

threejs 3D标注

import { CSS3DObject } from "three/examples/jsm/renderers/CSS3DRenderer";gltfLoader.load("./model/exhibit2.glb", (gltf) >{let array ["雕像", "中药房", "浸制区", "道地沙盘","动物标本区&quo…

docker安装一系列镜像

启动docker systemctl start docker docker 启动已经停止的容器 docker start idOrName PS:idOrName为容器的id或者名称 1、安装mysql镜像 拉取mysql5.7的镜像 docker pull mysql:5.7 查看镜像 docker images 启动mysql #启动mysql docker run --name mysql…