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
       */
  • 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适用于所给序列中所有的元素,则返回一个新序列。

  • 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(...)

posted on 2022-03-28 15:36  梁飞宇  阅读(221)  评论(0)    收藏  举报