swift小知识点之常用的 74个内置函数
一,概述
所谓的 内置函数 是指无需引入任何模块(比如说Fundation等)即可以直接使用的函数。
二,常规使用
-
1.断言 assert,参数如果为ture则继续,否则抛出异常
let number = 3 /*第一个参数为判断条件,第二各参数为条件不满足时的打印信息*/ assert(number > 3, "number 不大于3")
如果断言被处罚(number <= 3),将会强制结束程序,并打印相关信息
assertion failed: number 不大于 3
断言可以引发程序终止,主要用于调试阶段。比如下面的情况:
* 自定义整形数组索引越界问题
* 向函数传值,无效值引发函数不能完成相应任务
* Optional类型数据为nil值,引发的程序crash
- 2.返回最大最小值min(),max()
- max
print(max(10,20)) /* 打印: * 20 */
-
min
print(min(1, 3, 5, 9, 8)) /*打印: * 1 */
- max
- 3.排序 sorted (sort)
-
arry.sorted()
let arry = ["B","A","C"] let arry1 = arry.sorted() print(arry1) /*打印: *["A", "B", "C"] */
-
sorted(by: (String, String) throws -> Bool)
let arry = ["B","A","C"] let arry2 = arry.sorted { $1 < $0 } print(arry2) /*打印: *["C", "B", "A"] */
可以看出,可以用0、1、2来表示调用闭包中参数,0指代第一个参数,1指代第二个参数,2指代第三个参数,以此类推n+1指代第n个参数,后的数字代表参数的位置,一一对应。
-
- 4.map函数
- 数组元素进行2倍放大
let arr = [2,1,3] let doubleArr = arr.map { $0 * 2 } print(doubleArr) /* 打印: * [4, 2, 6] */
-
数组Int转String
let arr = [2,1,3] let moneyArr = arr.map { "¥\($0 * 2)"} print(moneyArr) /* 打印: * ["¥4", "¥2", "¥6"] */
-
数组转成元组
let arr = [2,1,3] let groupArr = arr.map {($0, "\($0)")} print(groupArr) /* 打印: * [(2, "2"), (1, "1"), (3, "3")] */
map(sequence, transformClosure): 如果transformClosure适用于所给序列中所有的元素,则返回一个新序列。
- 数组元素进行2倍放大
- 5.flapMap函数
flapMap函数会降低维度
let flapMap_ary = [["B", "A", "C"],["1","5"]] let flapMapAry = flapMap_ary.flatMap{$0} print(flapMapAry) /* 打印: * ["B", "A", "C", "1", "5"] */
- 6.筛选函数filter
let numbers = [1, 2, 3, 4, 5, 6] //获取偶数值 let evens = numbers.filter{$0 % 2 == 0} print(evens) /*打印: * [2, 4, 6] */
- 7.reduce函数
-
对数组各元素求和
let arr_reduce = [1, 2, 4,] let sum = arr_reduce.reduce(0) {$0 + $1} print(sum) /* 打印: * 7 */
-
对数组各元素求积
let arr_reduce = [1, 2, 4,] let product = arr_reduce.reduce(1) {$0 * $1} print(product) /* 打印: * 8 */
-
- 8.dump(object): 一个对象的内容转储到标准输出
-
方法的结构及参数说明
我们先看看这个方法的结构,官方文档并没有对参数的说明,所以这里我补充了一下:
/* * - T:是要打印的参数,是一个范型,也就是支持输出各种类型 * - name: 默认是空白,如果加上则会在打印内容前加入这个name * - indent:缩进,默认是0,如果设置则会向前缩进相应的空白 * - maxDepth:最大深度,默认全部打印,可以根据层级需要设置这个参数 * - maxItems:最大条数,默认是全部打印,如果需要限制内容,可以设置这个参数 */ @discardableResult func dump<T>(_ value: T, name: String? = default, indent: Int= default, maxDepth: Int = default, maxItems: Int = default) -> T
-
dump的几种使用场景:
-
dump打印array:
let names = ["apple","orange","banana"] dump(names) /* 输出: ▿ 3 elements - "apple" - "orange" - "banana" */
-
print打印array
let names = ["apple","orange","banana"] print(names) /* 输出: ["apple", "orange", "banana"] */
-
dump打印dictionary:
let iPhones = ["iPhoneX": 9688, "iPhone8 plus": 7888, "iphone8": 6888] dump(iPhones) /* 打印: ▿ 3 key/value pairs ▿ (2 elements) - key: "iphone8" - value: 6888 ▿ (2 elements) - key: "iPhone8 plus" - value: 7888 ▿ (2 elements) - key: "iPhoneX" - value: 9688 */
-
print打印dictionary
let iPhones = ["iPhoneX": 9688, "iPhone8 plus": 7888, "iphone8": 6888] print(iPhones) /* 打印: ["iPhone8 plus": 7888, "iphone8": 6888, "iPhoneX": 9688] */
-
下面进行更个性化的输出
let iPhones = ["iPhoneX": 9688, "iPhone8 plus": 7888, "iphone8": 6888] dump(iPhones, name: "iPhones' price", indent: 8, maxDepth: 1, maxItems: 2) /* 打印: ▿ iPhones' price: 3 key/value pairs ▹ (2 elements) (2 more children) */
如果打印的内容太多或者需要进行个性化的打印的时候,可以灵活使用后面的参数。
-
-
-
- 在我们开发的过程中,怎样使用这个方法呢?
1. 打印log的时候,可以取代print,打印更详细的内容
2. 需要在控制台打印数组或者字典的时候,用dump输出的东西更立体,不会像print一样打印出来是一行,对于特别大的数组或者字典很好用
3. debug的时候能直接打印出对象的信息,我们debug的时候常常会打断点,然后查看对象里的参数的值,用dump相当于把参数的那个界面全部展开并打印到了控制台上
- 在我们开发的过程中,怎样使用这个方法呢?
- 9.indices(sequence): 在指定的序列中返回元素的索引(零索引)
for i in arr_reduce.indices { print(i) } /* 打印: * 0 1 2 */
- 10.一些在编程中经常会用到的函数
- 获取绝对值
abs(-1) == 1 //获取绝对值
-
判断序列是否包含元素
["1","6","4"].contains("2") == false //判断序列是否包含元素
-
剔除最后一个元素
["a","b"].dropLast() == ["a"] //剔除最后一个元素
-
剔除第一个元素
["a","b"].dropFirst() == ["b"] //剔除第一个元素
-
判断序列是否相同
["a","b"].elementsEqual(["b","a"]) == false //判断序列是否相同
-
获取index(indices是index的复数)
["a","b"].indices == 0..<2 //获取index(indices是index的复数)
-
将序列以分隔符串联起来成为字符串
["A", "B", "C"].joined(separator: ":") == "A:B:C" //将序列以分隔符串联起来成为字符串
-
逆序,注意返回的并非原类型序列
Array([2, 7, 0].reversed()) == [0, 7, 2] //逆序,注意返回的并非原类型序列
- 获取绝对值
三,常用的 74 个函数
- Swift版取絕對值方法
abs(...) Int取绝对值
fabs(...) double取绝对值
fabsf(...) float取绝对值
- advance(...)
- alignof(...)
- alignofValue(...)
- assert(...)
- bridgeFromObjectiveC(...)
- bridgeFromObjectiveCUnconditional(...)
- bridgeToObjectiveC(...)
- bridgeToObjectiveCUnconditional(...)
- c_malloc_size(...)
- c_memcpy(...)
- c_putchar(...)
- contains(...)
- count(...)
- countElements(...)
- countLeadingZeros(...)
- debugPrint(...)
- debugPrintln(...)
- distance(...)
- dropFirst(...)
- dropLast(...)
- dump(...)
- encodeBitsAsWords(...)
- enumerate(...)
- equal(...)
- filter(...)
- find(...)
- getBridgedObjectiveCType(...)
- getVaList(...)
- indices(...)
- insertionSort(...)
- isBridgedToObjectiveC(...)
- isBridgedVerbatimToObjectiveC(...)
- isUniquelyReferenced(...)
- join(...)
- lexicographicalCompare(...)
- map(...)
- max(...)
- maxElement(...)
- min(...)
- minElement(...)
- numericCast(...)
- partition(...)
- posix_read(...)
- posix_write(...)
- print(...)
- println(...)
- quickSort(...)
- reduce(...)
- reflect(...)
- reinterpretCast(...)
- reverse(...)
- roundUpToAlignment(...)
- sizeof(...)
- sizeofValue(...)
- sort(...)
- split(...)
- startsWith(...)
- strideof(...)
- strideofValue(...)
- swap(...)
- swift_MagicMirrorData_summaryImpl(...)
- swift_bufferAllocate(...)
- swift_keepAlive(...)
- toString(...)
- transcode(...)
- underestimateCount(...)
- unsafeReflect(...)
- withExtendedLifetime(...)
- withObjectAtPlusZero(...)
- withUnsafePointer(...)
- withUnsafePointerToObject(...)
- withUnsafePointers(...)
- withVaList(...)