【Swift】面向协议编程之HelloWorld
- 定义一个协议(protocol),swift 中可以对protocol 进行扩展(extension)
- 通过协议的扩展可以对函数有默认的实现
protocol Sleepable {func sleep()
}
protocol Eatable {func eat()
}
extension Eatable {func eat() {print("eat food")}
}
- 在类(class)或结构体(struct)中实现protocol
//结构体实现协议
struct Cat: Eatable, Sleepable {func sleep() {print("cat sleep")}
}class Animal {func say() {print("say hello")}
}//类,继承和实现协议
class Dog: Animal, Eatable, Sleepable {func eat() {print("Dog eat")}func sleep() {print("Dog sleep")}
}
//Cat为结构体
let cat = Cat()
cat.eat()
cat.sleep()//Dog为class,继承了Animal的say方法,也获得了protocol的默认实现eat方法
let dog = Dog()
dog.eat()
dog.sleep()
dog.say()//输出结果:
//eat food
//cat sleep
//eat food
//Dog sleep
//say hello
- 为现有类型(Int ,String)扩展协议功能
protocol Describable {func describe() -> String
}
extension Describable {func describe() -> String {return "This is the number \(self)"}
}//Int使用默认的协议实现
extension Int: Describable {}
extension String: Describable {func describe() -> String {return "This is the string \"\(self)\""}
}let number: Describable = 42
print(number.describe()) // 输出:This is the number 42let text: Describable = "Hello"
print(text.describe()) // 输出:This is the string "Hello"
- 枚举实现协议
enum Pen:Printable{case normal}
enum Book: Printable {case fiction, nonFiction, biographyfunc printDetails() -> String {switch self {case .fiction:return "Fiction Book"case .nonFiction:return "Non-Fiction Book"case .biography:return "Biography Book"}}
}let pen = Pen.normalprint(pen.printDetails())//This is a printable item.let book = Book.fictionprint(book.printDetails()) // 输出:Fiction Book
- 为所有遵循 RawRepresentable 协议的枚举类型提供一个通用的 printRawValue 方法
protocol RawRepresentablePrintable: RawRepresentable {func printRawValue()
}extension RawRepresentablePrintable {func printRawValue() {print("Raw value: \(self.rawValue)")}
}enum Direction: Int, RawRepresentablePrintable {case north = 1case south = 2case east = 3case west = 4
}let direction = Direction.north
direction.printRawValue() // 输出:Raw value: 1
相关文章:
【Swift】面向协议编程之HelloWorld
定义一个协议(protocol),swift 中可以对protocol 进行扩展(extension)通过协议的扩展可以对函数有默认的实现 protocol Sleepable {func sleep() } protocol Eatable {func eat() } extension Eatable {func eat() {print("eat food")} }在类(class)或结…...
图神经网络学习笔记—纯 PyTorch 中的多 GPU 训练(专题十二)
对于许多大规模的真实数据集,可能需要在多个 GPU 上进行扩展训练。本教程将介绍如何通过 torch.nn.parallel.DistributedDataParallel 在 PyG 和 PyTorch 中设置多 GPU 训练管道,而无需任何其他第三方库(如 PyTorch Lightning)。请注意,此方法基于数据并行。这意味着每个 …...
Linux云计算SRE-第二十周
完成ELK综合案例里面的实验,搭建完整的环境 一、 1、安装nginx和filebeat,配置node0(10.0.0.100),node1(10.0.0.110),node2(10.0.0.120),采用filebeat收集nignx日志。 #node0、node1、node2采用以下相同方式收集ngin…...
springcloud gateway搭建及动态获取nacos注册的服务信息信息
前言 Spring Cloud Gateway 通过集成 Nacos 服务发现,可以动态获取注册到 Nacos 的微服务实例信息,并根据服务名(Service Name)自动生成路由规则或手动配置路由规则,实现请求的动态路由和负载均衡。 一个最简单的网关就…...
SSM基础专项复习6——Spring框架AOP(3)
系列文章 1、SSM基础专项复习1——SSM项目整合-CSDN博客 2、SSM基础专项复习2——Spring 框架(1)-CSDN博客 3、SSM基础专项复习3——Spring框架(2)-CSDN博客 4、SSM基础专项复习4——Maven项目管理工具(1ÿ…...
【嵌入式linux】网口和USB热插拔检测
在Linux常常需要对网口和USB等外设接口进行插拔检测,从而执行部分初始化操作。下面简要介绍Linux的Netlink机制,并在C程序中使用Linux的Netlink机制完成网口和USB口插拔检测。 Netlink 是 Linux 内核与用户空间进程通信的一种机制,主要用于内…...
C++(13)—类和对象(中) ③拷贝构造函数
文章目录 一、拷贝构造函数的基本概念1.1 什么是拷贝构造函数?1.2 拷贝构造函数的调用场景 二、拷贝构造函数的核心特性2.1 拷贝构造函数的参数2.2 默认拷贝构造函数 三、深拷贝与浅拷贝3.1 浅拷贝的问题 四、拷贝构造函数的实际应用4.1 何时需要显式定义拷贝构造函…...
【GPT入门】第17课 RAG向量检索分类、原理与优化
【GPT入门】第16课 RAG向量检索分类、原理与优化 1.向量检索概念1.1 文本检索的两类方式1.2 向量的定义1.3 文本向量(Text Embeddings)1.4 文本向量如何得到1.5 向量间相似度计算1.6 向量数据库功能对比1.7 open ai发布的两个向量模型2.向量数据库1.8 向量检索的优化3.检索后…...
Operator <=> (spaceship operator)
operator <>动机 在C20以前定义比较运算符:其他比较运算符基于<和实现 struct Type {int value;// 相等运算符friend bool operator(const Type& a, const Type& b) {return a.value b.value;}// 不等运算符friend bool operator!(const Type&a…...
队列的简单例题
题目如下 模拟队列 首先你要明白队列的话 只有队尾才能进行新增,也就是入队 只有队首才能出队,也就是删除 队首队尾指针一开始默认都是0 相当于队列中一开始是有一个元素的就是 0的位置 队首指针head0 队尾指针tail0 1.入队也就是队尾要先赋值…...
Calibre-Web-Automated:打造你的私人图书馆
有没有小伙伴在工作、学习或生活中喜欢保存一些书籍或PDF文件,结果过一段时间想找的时候却怎么也找不到,最后只能无奈放弃?你是否已经厌倦了手动管理电子书的繁琐?是否梦想拥有一个私人图书馆,随时随地都能轻松访问自己…...
第27周JavaSpringboot 前后端联调
电商前后端联调课程笔记 一、项目启动与环境搭建 1.1 项目启动 在学习电商项目的前后端联调之前,需要先掌握如何启动项目。项目启动是整个开发流程的基础,只有成功启动项目,才能进行后续的开发与调试工作。 1.1.1 环境安装 环境安装是项…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-8.2.1AWS OpenSearch无服务器方案
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 8.2.1AWS OpenSearch 无服务器方案深度解析与实践指南1. Serverless架构的核心价值与行业趋势1.1 传统Elasticsearch集群的运维挑战1.2 Serverless技术演进路线技术特性对比…...
鸿蒙开发者社区资源的重要性
鸿蒙系统,作为华为公司自主研发的操作系统,旨在为各类智能设备提供统一的平台。它不仅支持手机、平板电脑等移动设备,还涵盖了物联网(IoT)设备和其他智能家居产品。鸿蒙系统的开发环境和工具链对于开发者来说至关重要&…...
【QT】事件系统入门——QEvent 基础与示例
一、事件介绍 事件是 应用程序内部或者外部产生的事情或者动作的统称 在 Qt 中使用一个对象来表示一个事件。所有的 Qt 事件均继承于抽象类 QEvent。事件是由系统或者 Qt 平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候&…...
⚡️Jolt -- 通过JSON配置来处理复杂数据转换的工具
简介:一个能够通过JSON配置(特定的语法)来处理复杂数据转换的工具。 比如将API响应转换为内部系统所需的格式,或者处理来自不同来源的数据结构差异。例如,将嵌套的JSON结构扁平化,或者重命名字段࿰…...
2025-03-13 禅修-错误的做法
摘要: 2025-03-13 禅修-错误的做法 禅修-错误的做法 我们今天的课程是这个禅修防误。主要是有一些我们所明令禁止的。在整个禅修过程中,会对我们禅修出现一些弊端的这部分,我们会给大家介绍。第一,在禅修中要防止自由联想,防止幻…...
uni-app学习笔记——自定义模板
一、流程 1.这是一个硬性的流程,只要按照如此程序化就可以实现 二、步骤 1.第一步 2.第二步 3.第三步 4.每一次新建页面,都如第二步一样;可以选择自定义的模版(vue3Setup——这是我自己的模版),第二步的…...
【医院绩效管理专题】8.医院绩效数据的收集与整理方法:洞察现状,引领未来
医院成本核算、绩效管理、运营统计、内部控制、管理会计专题索引 一、引言 在当今医疗行业竞争日益激烈的背景下,医院绩效管理已成为提升医疗服务质量、优化运营效率、增强综合竞争力的关键因素。而绩效数据的收集与整理作为绩效管理的基础环节,其科学性、准确性和完整性直…...
麒麟系统如何安装Anaconda
在银河麒麟操作系统(Kylin OS)中安装 Anaconda 的步骤相对简单,以下是基于搜索结果整理的详细安装指南: 步骤 1:下载 Anaconda 安装脚本 打开浏览器,访问 Anaconda 官方下载页面。选择适合 Linux 系统的安…...
Linux网络套接字编程——UDP服务器
Linux网络套接字编程——创建并绑定-CSDN博客 前面已经介绍了网络套接字的创建和绑定,这篇文章会通过UDP套接字实现一个UDP服务器。 先介绍将使用的接口。 recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,struct sockaddr *src_addr,…...
deepseek+kimi做ppt教程记录
1.首先注册deepseek和kimi deepseek官网:https://chat.deepseek.com/ kimi官网:https://kimi.moonshot.cn/ 以下以一篇工作总结报告为例 2.使用deepseek生成ppt大纲 让deepseek生成kimi生成ppt所需要的内容时,需要注意提示词内容,…...
Cursor 终极使用指南:从零开始走向AI编程
Cursor 终极使用指南:从零开始走向AI编程 问什么是cursor? mindmaproot(Cursor核心功能)智能编码代码生成自动补全错误修复项目管理多窗口布局版本控制终端集成个性设置主题定制快捷键配置插件扩展AI协作对话编程知识检索文档生成前些天发现了一个巨牛的人工智能学…...
TiDB 观测性解读(一)丨索引观测:快速识别无用索引与低效索
导读 可观测性已经成为分布式系统成功运行的关键组成部分。如何借助多样、全面的数据,让架构师更简单、高效地定位问题、分析问题、解决问题,已经成为业内的一个技术焦点。本系列文章将深入解读 TiDB 的关键参数,帮助大家更好地观测系统的状…...
批量将 Excel 文档中的图片提取到文件夹
前面我们介绍过如何批量删除 Excel 文档中的所有图片或者指定的图片,其中就需要用到批量提取 Excel 文档中图片的操作。我们如何才能够将 Excel 文档中的图片快速的提取出来呢?其实单个 Excel 文档中的图片提取到文件夹中是有多种方法可以完成的…...
postgresql 数据库使用
目录 索引 查看索引 创建 删除索引 修改数据库时区 索引 查看索引 select * from pg_indexes where tablenamet_table_data; 或者 select * from pg_statio_all_indexes where relnamet_table_data; 创建 CREATE INDEX ix_table_data_time ON t_table_data (id, crea…...
怎样进行相关论文的调研——How to conduct research on relevant papers?
怎样进行相关论文的调研 写在前面1.打开Web of Science2.检索同类表达3.构建“检索式”什么是“检索式” 参考内容 写在前面 偶然间刷到一篇知乎文章,顺着文章的推荐看了钟澄老师的科研论和在B站上的教学视频,深入了解后发现读文章还有这么多讲究&#…...
蓝桥杯备赛-基础练习 day1
1、闰年判断 问题描述 给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年:1.年份是4的倍数而不是100的倍数 2.年份是400的倍数。 其他的年份都不是闰年。 输入格式 输入包含一个…...
本地算力部署大模型详细流程(一)
1、版本选择 本地部署就是自己部署deepseek模型,使用本地的算力。 主要瓶颈:内存显存的大小。特点:此方案不用联网。适合:有数据隐私方面担忧的或者保密单位根本就不能上网的。 2、部署过程 比较流行的是使用ollama:ht…...
便利店商品推荐数字大屏:基于python和streamlit
基于python和streamlit实现的便利店商品推荐大屏,针对选择困难症消费者。 import streamlit as st import pandas as pd import numpy as np import altair as alt from datetime import datetime, timedelta import time# 模拟数据生成 def generate_data():np.ra…...
机器视觉工程师红外相机的选择:红外长波工业相机和短波红外工业相机玄机大总结
红外长波(LWIR)和短波(SWIR)工业相机在原理、应用场景和技术特点上有显著差异。以下是它们的对比分析: 1. 波长范围与成像原理 2. 技术特点 3. 典型应用场景 4. 优缺点对比 LWIR优势: 无需光照,适用于完全黑暗环境。 直接反映物体温度分布。 对烟雾、灰尘穿透能力强。…...
AI重构SEO关键词布局
内容概要 在搜索引擎优化(SEO)领域,AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型,智能系统能够实时解析海量搜索数据,构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…...
c语言经典基础编程题
c语言经典基础编程题 一、输出输出1.1温度输出1.2排齐数据1.3进制转换 二、选择分支2.1求最大值2.2成绩评定2.3分段函数求值2.4 利润计算2.5判断闰年2.6二次方程根 三、循环结构3.1倒数求和3.2最大数3.3判断素数3.4判断完全数3.5打印菱形🚀🚀Ὠ…...
【每日学点HarmonyOS Next知识】防截屏、作用域问题、观察器问题、对话框关闭、判断对象包含某个字段
1、HarmonyOS 防截屏功能如何实现? 防截屏功能如何实现 参考demo: aboutToDisappear(): void {let windowClass: window.Window | undefined undefined;window.getLastWindow(getContext(this)).then((win) > {this.window win }) window.getLas…...
linux操作系统实战
第一题 创建根目录结构中的所有的普通文件 [rootlocalhost ~]# cd /[rootlocalhost /]# mkdir /text[rootlocalhost /]# cd /text[rootlocalhost text]# mkdir /text/boot /text/root /text/home /text/bin /text/sbin /text/lib /text/lib64 /text/usr /text/opt /text/etc /…...
MKS HA-MFV:半导体制造中的高精度流量验证技术解析
引言 在半导体先进制程(如3nm节点)中,工艺气体流量的精准控制直接决定刻蚀、沉积等关键步骤的均匀性和良率。MKS Instruments推出的 HA-MFV(High Accuracy Mass Flow Verifier) 通过创新设计解决了传统流量验证技术的…...
图论part2|200. 岛屿数量、695. 岛屿的最大面积
200、岛屿数量 🔗:200. 岛屿数量 - 力扣(LeetCode)思路: 1. 深度优先算法 二叉树中dfs要素:1、访问左右相邻子节点 2、判断base case(终止条件)参考二叉树中的dfs看网格问题1. 网格…...
小白学Agent技术[5](Agent框架)
文章目录 Agent框架Single Agent框架BabyAGIAutoGPTHuggingGPTHuggingGPT工作原理说明GPT-EngineerAppAgentOS-Copilot Multi-Agent框架斯坦福虚拟小镇TaskWeaverMetaGPT微软UFOAgentScope现状 常见Agent项目比较概述技术规格和能力实际应用案例开发体验比较ChatChain模式 Agen…...
SpringBoot为什么流行以及能解决什么问题?
Spring Boot 之所以流行,主要是因为它极大地简化了 Spring 应用的开发,提供了一种开箱即用的体验,使开发者能够快速构建独立运行的、生产级的 Spring 应用。 Spring Boot 为什么流行? 简化配置 传统 Spring 需要大量 XML 或 Java…...
MySQL -- 数据类型
1、数据库的基础数据类型 TINYINT INT BIGINT FLOAT DECIMAL CHAR VARCHAR TEXT BLOB DATE DATETIME TIMESTAMP SET ENUM 2、不同数据类型区别以及作用 1、数值类型 1.1 整数类型 1.1.1 TINYINT 这里我们以TINYINT这个类型为例,解释一下在mysql中…...
TypeScript 中 interface 与 type的使用注意事项 及区别详细介绍
interfact 与 type 的区别及使用方法 一、 interfact 与 type主要区别 二、 interfact 与 type具体用法 1. 定义对象类型 interface 的典型用法: interface Person {name: string;age: number;greet(): void; }type 的等效定义: type Person {name…...
使用位运算如何找到数组中只出现一次的数?
题目链接:137. 只出现一次的数字 II - 力扣(LeetCode) 算法解析 位运算是用于二进制的运算符号。而对于多次出现的数字,其二进制都是一模一样的,这里是3次重复的出现是数字。由此我们可以想到,如果我们由低…...
复变函数摘记1
复变函数摘记1 1. 基本概念1.1 复数、复变函数1.2 复变函数的极限、连续性1.3 复变函数的导数、微分1.4 解析函数、柯西-黎曼方程 2. 复变函数的积分2.1 复变函数的曲线积分2.2 柯西-古萨基本定理、复合闭路定理2.3 复变函数的不定积分2.4 柯西积分公式、高阶导数 \quad 本文摘…...
(2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应
Dynamic Low-Rank Sparse Adaptation for Large Language Models 目录 1. 引言 1.1 关键词 2. 方法 2.1 预备知识 2.2 层级稀疏率确定 2.3 稀疏感知的秩分配 2.4 动态稀疏与适配 3. 实验 3.1 实验设置 3.2 语言建模 3.3 零样本任务 3.4 N:M 稀疏性 3.5 消融实验 …...
暨南大学智科人工智能复试模拟
本人初试统招线以外,复试逆袭上岸!!!复试中的笔试和面试尤为重要,笔试固然重要但是面试的不确定性更强。另外,很多同学在复试之前可能都没有完整的走过一遍复试面试的流程,这里建议大家最好是能…...
编译器视角下的 C++ 异常:探究 throw 与 catch 的编译原理
目录 0.写在前面 1.C异常概念 异常的定义: 异常处理的基本组成部分: 1. throw表达式 2. try块 3. catch块 2. 异常的使用 异常的抛出和匹配原则: 在函数调用链中异常栈展开匹配原则: 3.异常的重新抛出 4.异常安全 异…...
测试淘宝评论接口返回数据的详细说明
在电商数据分析、用户体验优化和竞品分析中,获取商品评论数据是一项重要的功能。淘宝开放平台提供了商品评论的 API 接口,允许开发者通过合法的方式获取商品的用户评论数据。本文将详细介绍如何测试淘宝评论接口的返回数据,包括接口调用步骤、…...
【微知】plantuml在泳道图中如何将几个步骤放入一个框中?(group “sub框1“; end !! “sub框1“)
背景 将几个步骤放在一起画个框,分区方便 命令 用法: group 和 end 关键字 用法: group "sub框1"User -> User: 模板渲染User -> User: 返回 HTMLend !! "sub框1" 这里!!是注释实操 修改前: 修改…...
深入解析 React 最新特性:革新、应用与最佳实践
深入解析 React 最新特性:革新、应用与最佳实践 1. 引言 React 作为前端开发的核心技术之一,近年来不断推出 新的 API 和优化机制,从 Concurrent Rendering(并发模式) 到 Server Components(服务器组件&a…...
C语言之数据结构:理解什么是数据结构和算法(启航)
引言 启航篇,理解什么是数据结构和算法 在 C 语言编程领域,数据结构和算法是两个核心且紧密相关的概念 一、数据结构 定义 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合(比如数组),它是组织和存储数…...