Swift高级特性之泛型

server/2024/10/18 16:54:09/

泛型是一种在编程语言中实现通用性的特性,它允许我们编写可以适应不同数据类型的代码。在Swift中,泛型可以应用于函数、类、结构体和枚举。

1.泛型函数:使用泛型函数可以编写一次代码,用于处理不同类型的数据。例如,我们可以编写一个泛型函数来交换任意两个变量的值:
swift">func swap<T>(_ a: inout T, _ b: inout T) {let temp = aa = bb = temp
}var num1 = 10
var num2 = 20
swap(&num1, &num2)
print("num1 = \(num1), num2 = \(num2)")  // 输出:num1 = 20, num2 = 10var str1 = "Hello"
var str2 = "World"
swap(&str1, &str2)
print("str1 = \(str1), str2 = \(str2)")  // 输出:str1 = World, str2 = Hello

2.泛型类型:使用泛型类型可以编写可以处理不同类型数据的类、结构体和枚举。例如,我们可以编写一个泛型栈来存储任意类型的元素:
swift">struct Stack<Element> {var elements: [Element] = []mutating func push(_ element: Element) {elements.append(element)}mutating func pop() -> Element? {return elements.popLast()}
}var intStack = Stack<Int>()
intStack.push(10)
intStack.push(20)
intStack.push(30)
print(intStack.pop())  // 输出:Optional(30)var strStack = Stack<String>()
strStack.push("Hello")
strStack.push("World")
strStack.push("!")
print(strStack.pop())  // 输出:Optional("!")
3.泛型约束:使用泛型约束可以限制泛型类型的范围。例如,我们可以在泛型函数中使用泛型约束,限制参数类型必须遵循某个协议:
swift">protocol Comparable {static func >(lhs: Self, rhs: Self) -> Bool
}func findMax<T: Comparable>(_ array: [T]) -> T? {guard !array.isEmpty else {return nil}var max = array[0]for element in array {if element > max {max = element}}return max
}let numbers = [1, 2, 3, 4, 5]
let maxNumber = findMax(numbers)
print(maxNumber)  // 输出:Optional(5)let strings = ["Hello", "World", "!"]
let maxString = findMax(strings)
print(maxString)  // 输出:Optional("World")

泛型是Swift中非常强大和灵活的特性之一,它能够让我们写出更加通用和可复用的代码。通过使用泛型,我们可以大幅减少重复代码的数量,并且提高代码的可读性和可维护性。


http://www.ppmy.cn/server/5652.html

相关文章

为什么用云渲染农场?3D云渲染农场助力影视动画行业发展

​计算机图形技术的进步使得3D渲染成为多个产业发展的重要推动力。设计师和艺术家利用这项技术将创意实现&#xff0c;创造出震撼的视觉作品。但是&#xff0c;高质量的渲染需要大量的计算资源。云渲染农场通过提供这些资源&#xff0c;有效提高了渲染的速度和效率&#xff0c;…

.net8系列-03图文并茂手把手教你配置Swagger以及实现接口版本控制

前情提要 接上篇文章&#xff0c;我们的应用已经创建完毕了&#xff0c;接口也有了&#xff0c;接下来我们配置显示接口注释和实现接口的版本控制 准备工作 页面展示 在创建项目的时候我们已经有了一个基础版本的Swagger&#xff0c;可以看到接口以及测试接口&#xff0c;如…

免费GPT-3.5部署指南

OpenAI近期宣布&#xff0c;GPT-3.5现已支持无账号使用&#xff0c;这一变化无疑为全球AI爱好者带来了福音。然而&#xff0c;由于网络和地域限制&#xff0c;国内许多朋友仍然面临着使用上的挑战。 今天&#xff0c;我将向大家推荐两个开源项目&#xff0c;它们能够帮助您在国…

OpenHarmony网络协议通信—kcp

kcp 是一种 ARQ 协议,可解决在网络拥堵情况下 tcp 协议的网络速度慢的问题 下载安装 直接在 OpenHarmony-SIG 仓中搜索 kcp 并下载。 使用说明 准备一套完整的 OpenHarmony 3.1 Beta 代码 库代码存放路径&#xff1a;./third_party/kcp 修改添加依赖的编译脚本 在/develo…

云手机助力舆情监测,智慧引领信息时代

随着信息时代的到来&#xff0c;舆情监测已成为政府、企业、高校、金融机构等各行业的必备利器。在这个信息爆炸的时代&#xff0c;如何及时准确地感知民意、把握市场动态&#xff0c;已成为各界迫切需要解决的问题。而云手机作为信息时代的新生力量&#xff0c;在舆情监测方面…

vue 常用的日历排班,带农历显示组件(2024-04-16)

显示当前月日历组件&#xff0c;里面带农历或节日显示 后面可以丰富一些国家法定节假期的业务需求 代码 js-calendar.js 文件 var lunarInfo [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, //1900-19090x04ae0, 0x0a5b6, 0…

MYSQL之增删改查(下)

前言&#xff1a; 以下是MySQL最基本的增删改查语句&#xff0c;很多IT工作者都必须要会的命令&#xff0c;也 是IT行业面试最常考的知识点&#xff0c;由于是入门级基础命令&#xff0c;所有所有操作都建立在单表 上&#xff0c;未涉及多表操作。 4.3 高级查询 4.3.1 聚合函…

在PostgreSQL中,如何创建一个触发器并在特定事件发生时执行自定义操作?

文章目录 解决方案示例代码1. 创建自定义函数2. 创建触发器 解释 在PostgreSQL中&#xff0c;触发器&#xff08;trigger&#xff09;是一种数据库对象&#xff0c;它能在特定的事件&#xff08;如INSERT、UPDATE或DELETE&#xff09;发生时自动执行一系列的操作。这些操作可以…