[Swift]Swift的常用内置函数
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9837176.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
内置函数:在Swift中不需要导入任何模块(如UIKit等)或者引用任何类就可以使用的函数。Swift预先定义的函数
//快捷键Control+⌘+Space来开启Emoji字符输入
1、断言assert和先决条件precondition
断言和先决条件是在运行时发生的检查。在执行任何进一步的代码之前,您可以使用它们来确保满足基本条件。如果断言或先决条件中的布尔条件求值为true,则代码执行将照常继续。如果条件评估为false,则程序的当前状态无效; 代码执行结束,您的应用程序终止。
断言和先决条件之间的区别在于它们的检查时间:仅在调试版本中检查断言,但在调试和生成版本中都会检查先决条件。在生产版本中,不会评估断言中的条件。这意味着您可以在开发过程中使用任意数量的断言,而不会影响生产中的性能。
使用断言进行调试
您可以通过assert(_:_:file:line:)从Swift标准库中调用函数来编写断言。您将此函数传递给一个表达式,该表达式求值为true或者false,如果条件的结果为,则显示一条消息false。例如:
1 let age = -3 2 assert(age >= 0, "A person's age can't be less than zero.") 3 // This assertion fails because -3 is not >= 0.
在此示例中,如果求值,则代码执行继续,即,值是否为非负值。如果值为负,如上面的代码所示,则求值为,并且断言失败,终止应用程序。
你可以省略断言消息 - 例如,它只是重复条件作为断言。
assert(age >= 0)
如果代码已经检查了条件,则使用该assertionFailure(_:file:line:)
函数指示断言失败。例如:
1 if age > 10 { 2 print("You can ride the roller-coaster or the ferris wheel.") 3 } else if age >= 0 { 4 print("You can ride the ferris wheel.") 5 } else { 6 assertionFailure("A person's age can't be less than zero.") 7 }
执行先决条件
只要条件可能为false,就使用先决条件,但对于代码继续执行必须确实为真。例如,使用先决条件检查下标是否超出范围,或检查函数是否已传递有效值。
你通过调用precondition(_:_:file:line:)
函数来编写前提条件。您将此函数传递给一个表达式,该表达式求值为true
或者false
,如果条件的结果为,则显示一条消息false
。例如:
1 // In the implementation of a subscript... 2 precondition(index > 0, "Index must be greater than zero.")
您也可以调用该preconditionFailure(_:file:line:)
函数来指示发生了故障 - 例如,如果采用了交换机的默认情况,但是所有有效的输入数据应该由交换机的其他情况之一处理。
注意
如果以unchecked mode(-Ounchecked
)编译,则不检查先决条件。编译器假定先决条件始终为true,并相应地优化代码。但是,fatalError(_:file:line:)
无论优化设置如何,该功能始终会暂停执行。
您可以fatalError(_:file:line:)
在原型设计和早期开发期间使用该功能,通过编写fatalError("Unimplemented")
存根实现来创建尚未实现的功能的存根。因为致命错误永远不会被优化,与断言或先决条件不同,您可以确保执行总是在遇到存根实现时停止。
2、count函数:获取序列的元素个数
1 let str:String = "strengthen" 2 print(str.count) 3 //Pring: 10 4 print(str.characters.count) 5 //Pring: 10 6 let arr:[Int] = [1,2,3,4,5] 7 print(arr.count) 8 //Pring: 5
3、enumerated() 将原有序列转换成以元组作为元素的序列输出
1 let arr = ["s","t","r","e","n","g","t","h","e","n"] 2 //打印新序列 3 for (i,j) in arr.enumerated() 4 { 5 print("\(i):\(j)") 6 } 7 //0:s 8 //1:t 9 //2:r 10 //3:e 11 //4:n 12 //5:g 13 //6:t 14 //7:h 15 //8:e 16 //9:n
4、max() 返回多个元素的最大值
min() 返回多个元素的最小值
1 /*min()*/ 2 //方式1 3 let num1 = min(9,1) 4 print(num1) 5 //Print 1 6 let num2 = min(9,7,5,3,1) 7 print(num2) 8 //Print 1 9 10 let arr = [3,1,5,9] 11 //方式2 数组 12 let num4 = arr.min { (a, b) -> Bool in 13 a < b 14 } 15 print(num4) 16 //Print Optional(1) 17 18 /*max()*/ 19 //方式1 20 let num1 = max(9,1) 21 print(num1) 22 //Print 9 23 let num2 = max(9,7,5,3,1) 24 print(num2) 25 //Print 9 26 27 let arr = [3,1,5,9] 28 //方式2 数组 29 let num4 = arr.max { (a, b) -> Bool in 30 a < b 31 } 32 print(num4) 33 //Print Optional(9)
5、map函数:对数组/序列中的元素进行特定操作,返回一个新的数组/序列。
map函数能够被数组调用,它接受一个闭包作为参数,作用于数组中的每个元素,闭包返回一个变换后的元素,接着将所有这些变换后的元素组成一个新的数组。
1 let arr = [1,2,3,4,5,6,7,8,9] 2 3 //数组各元素放大2倍 4 let doubleArr = arr.map {$0 * 2} 5 print(doubleArr) 6 //Print [2, 4, 6, 8, 10, 12, 14, 16, 18] 7 8 //Int数组各元素放大3倍,再转换为String 9 let moneyArr = arr.map { "$\($0 * 3)"} 10 print(moneyArr) 11 //Print ["$3", "$6", "$9", "$12", "$15", "$18", "$21", "$24", "$27"] 12 13 //数组转元组 14 let groupArr = arr[0...5].map{($0, "\($0)")} 15 print(groupArr) 16 //Print [(1, "1"), (2, "2"), (3, "3"), (4, "4"), (5, "5"), (6, "6")]
6、flapMap降低数组维度,过滤数组中的nil值。
1 let arr1 = [[1,2],[3,4],[5,6],[7,8,9]] 2 3 //flapMap函数降低维度 4 let flapMapAry1 = arr1.flatMap{$0} 5 print(flapMapAry1) 6 //Print [1, 2, 3, 4, 5, 6, 7, 8, 9] 7 8 //flapMap函数降低维度 9 let arr2 = [[[1,1,1],2],[3,4],[5,6],[7,8,[9,9,9]]] 10 //flapMap函数降低维度 11 let flapMapAry2 = arr2.flatMap{$0} 12 print(flapMapAry2) 13 //Print [[1, 1, 1], 2, 3, 4, 5, 6, 7, 8, [9, 9, 9]] 14 15 //flapMap函数会过滤数组中的nil值 16 let arr3:[Int?] = [1, 2, 3, nil, nil] 17 let flapMapAry3 = arr3.flatMap{$0} 18 print(flapMapAry3) 19 //Print [1, 2, 3]
7、filter筛选函数:序列/数组的元素进行筛选,筛选的结果放入一个新的数组
1 let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] 2 3 //方式1 4 //筛选偶数值 5 let even = numbers.filter{(num) -> Bool in 6 num % 2 == 0 7 } 8 print("\(even) ", terminator: "") 9 //Print [2, 4, 6, 8] 10 11 //筛选奇数值 12 let odd = numbers.filter{(num) -> Bool in 13 num % 2 == 1 14 } 15 print("\(odd) ", terminator: "") 16 //Pring [1, 3, 5, 7, 9] 17 18 //方式2 19 //筛选偶数值 20 let evens = numbers.filter{$0 % 2 == 0} 21 print("\(evens) ", terminator: "") 22 //Print [2, 4, 6, 8] 23 24 //筛选奇数值 25 let odds = numbers.filter{$0 % 2 == 1} 26 print("\(odds) ", terminator: "") 27 //Pring [1, 3, 5, 7, 9]
8、reduce():给定一个序列sequence,以及一个初始值initial,然后将initial和序列里的第1个元素作为参数传入combineClosure中进行运算,得到的结果保存到initial;然后再将initial和第2个元素传入combineClosure中计算,结果保存到initial;重复计算直到所有sequence中的元素都计算完毕,并返回最终的initial值。
1 let arr = [1,2,3,4,5] 2 //方式1 3 let res = arr.reduce(0){(res, item) -> Int in 4 res + item 5 } 6 print("\(res) ", terminator: "") 7 //Print 15 8 9 //方式2 10 //数组各元素求和reduce(0) 11 let sum = arr.reduce(0) {$0 + $1} 12 print("\(sum) ", terminator: "") 13 //Print 15 14 //数组各元素求积reduce(1) 15 let product = arr.reduce(1) {$0 * $1} 16 print("\(product) ", terminator: "") 17 //Print 120 18 19 //方式3 20 let arr2 = ["1","2","3","4","5"] 21 //方式2:数组转字符串 22 let str = arr2.reduce("", {$0 + $1}) 23 print("\(str) ", terminator: "") 24 //Print 12345
9、绝对值函数
abs()函数:取绝对值。适用于整数和浮点数
fabs(double):取double类型的取绝对值
fabsf(double):取float类型的取绝对值
1 //小数位5个9 2 print(abs(9.999999)) 3 print(fabs(9.999999)) 4 print(fabsf(9.99999)) 5 //Print 9.999999 6 7 //小数位6个9 8 print(fabsf(9.999999)) 9 //Print 1.0
10、dropFirst(): 返回一个去掉第一个元素的新序列/数组
1 //初始化一个数组 2 var arr = ["s","t","r","e","n","g","t","h","e","n"] 3 //删除第一位元素,变成ArraySlice<String>类型 4 var arr2:ArraySlice<String> = arr.dropFirst() 5 //ArraySlice<String>类型转换为[String]类型 6 var arr3 = [String](arr.dropFirst()) 7 print(arr2) 8 //Print ["t", "r", "e", "n", "g", "t", "h", "e", "n"] 9 print(arr3) 10 //Print ["t", "r", "e", "n", "g", "t", "h", "e", "n"]
11、dropLast(): 返回一个的新序列/数组,该序列去掉作为参数传递给函数的最后一个元素。
1 //初始化一个数组 2 var arr = ["s","t","r","e","n","g","t","h","e","n"] 3 //删除第一位元素,变成ArraySlice<String>类型 4 var arr2:ArraySlice<String> = arr.dropLast() 5 //ArraySlice<String>类型转换为[String]类型 6 var arr3 = [String](arr.dropLast()) 7 print(arr2) 8 //Print ["s", "t", "r", "e", "n", "g", "t", "h", "e"] 9 print(arr3) 10 //Print ["s", "t", "r", "e", "n", "g", "t", "h", "e"]
12、dump(object): 一个对象的内容转储到标准输出。
1 //初始化一个数组 2 var arr = ["s","t","r","e","n","g","t","h","e","n"] 3 dump(arr) 4 //Print 5 ▿ 10 elements 6 - "s" 7 - "t" 8 - "r" 9 - "e" 10 - "n" 11 - "g" 12 - "t" 13 - "h" 14 - "e" 15 - "n"
13、elementsEqual(other: Sequence): 判断两个序列/数组中的元素是否完全相等,元素的顺序也必须相同。
1 //初始化一个数组 2 var arr1 = ["s","t","r","e","n","g","t","h","e","n"] 3 var arr2 = ["s","t","r","e","n","g","t","h","e","n"] 4 //判断两个序列/数组中的元素是否完全相等,元素的顺序也必须相同 5 let flag = arr1.elementsEqual(arr2) 6 print(flag) 7 //Print true
14、contains() 序列/数组是否包含某个元素:如果某个序列sequence(比如说一个数组)包含指定的元素element,则返回true,否则返回false
1 //初始化一个数组 2 var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9] 3 4 //方式1:闭包拓展性强 5 let flag = arr.contains { (num) -> Bool in 6 //判断是否包含偶数 7 num % 2 == 0 8 } 9 print(flag) 10 //Print true 11 12 //方式2:直接 13 print(arr.contains(7)) 14 //Print true
15、joined(separator: String)序列\数组拼接字符串,对数组的元素顺序拼接,并插入指定字符串
1 var arr = ["s","t","r","e","n","g","t","h","e","n"] 2 let str = arr.joined(separator: "-") 3 print(str) 4 //Print s-t-r-e-n-g-t-h-e-n
16、sorted排序,sorted()默认是升序,.sorted(by: (Int, Int) -> Bool)自定义排序
1 //方式1 2 //sorted()默认是升序 3 let arr1 = arr.sorted() 4 print(arr1) 5 //Print [1, 2, 3, 4, 5] 6 7 //方式2 8 //降序 9 let arr2 = arr.sorted { (a, b) -> Bool in 10 a > b 11 } 12 //简写形式 13 let arr3 = arr.sorted{$0 > $1} 14 //最简形式 15 let arr4 = arr.sorted(by: >) 16 print(arr2) 17 print(arr3) 18 print(arr4) 19 //Print [5, 4, 3, 2, 1] 20 21 //升序 22 let arr5 = arr.sorted { (a, b) -> Bool in 23 a < b 24 } 25 //简写形式 26 let arr6 = arr.sorted{$0 < $1} 27 //最简形式 28 let arr7 = arr.sorted(by: <) 29 print(arr5) 30 print(arr6) 31 print(arr7) 32 //Print [1, 2, 3, 4, 5]
17、indices: 在指定的序列中返回元素的索引(零索引),可用于字符串遍历
reversed(): 返回所给序列的倒序。
1 let arrayStr:[String] = ["s","t","r","e","n","g","t","h","e","n","!"] 2 3 //根据元素索引倒序遍历 4 for item in arrayStr.indices.reversed() { 5 print("\(item) ", terminator: "") 6 } 7 //Print 10 9 8 7 6 5 4 3 2 1 0
18、其他函数
1 let num:Double = 3.141592658 2 // round:四舍五入 3 let res1 = round(num) 4 // ceil: 向上取整,返回大于或者等于指定表达式的最小整数 5 let res2 = ceil(num) 6 // floor: 向下取整,返回不大于指定表达式的的最大整数 7 let res3 = floor(num) 8 9 print(res1) 10 //Print 3.0 11 print(res2) 12 //Print 4.0 13 print(res3) 14 //Print 3.0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)