美文网首页Swift
Swift闭包作为函数或方法参数简写

Swift闭包作为函数或方法参数简写

作者: 狂奔的胖蜗牛 | 来源:发表于2017-05-09 14:37 被阅读280次

    首先,我们看看闭包作为函数的参数时简写是什么样子的:

    let arr = [1,2,3]
    //下方代码的作用是,遍历数组,打印出每一个元素
    arr.map { print($0) }
    //下方代码的作用是,从大到小排序数组内元素,生成一个新的数组new
    let new = arr.sorted { $0 > $1 }
    

    可能第一次接触swift的朋友会一脸懵逼,这都是什么意思?不急,往下看完。

    1.什么是闭包

    闭包:就是自包含的代码块,可以在代码中被传递和使用。
    闭包,实际上就是OC里面的blocks,在其它语言里面就是匿名函数。

    闭包在swift中有几种形式,我们的主题是闭包的简写,关于闭包更多的概念,就不详细讲解了。

    2.完整函数的写法

    我们用数组的sorted(by:)排序方法来举例。该方法会返回一个与原数组大小相同,内部元素不同的数组,对原数组,该方法不会修改。sorted(by:)方法接收一个函数参数,函数的类型为:(Int, Int) -> Bool。

    let arr = [1,2,3,8,6,5,4]
    //定义出排序函数
    func sortedMethod(_ s1: Int, _ s2: Int) -> Bool {
        return s1 > s2
    }
    //排序
    let new = arr.sorted(by: sortedMethod) //new的内容:8 6 5 4 3 2 1
    

    3.使用闭包的写法

    sorted(by:)方法,可以接收一个闭包用来代替函数作为参数

    //使用闭包。in关键字,表示闭包的参数和返回值类型定义已经完成,闭包函数体即将开始
    let new1 = arr.sorted(by: { (s1: Int, s2: Int) -> Bool in
        return s1 > s2
    }) //new的内容:8 6 5 4 3 2 1
    

    4.根据上下文推断类型

    因为闭包是作为sorted(by:)方法的参数传入的,所以闭包的参数和返回类型可以被推断出来。所以闭包的参数和返回值声明可以被省略。如下:

    //省略参数和返回值声明
    let new2 = arr.sorted(by: { s1, s2 in
        return s1 > s2
    })
    

    虽然说这样写很方便,但是会不利于阅读,完整的写完格式,能够提高代码的可读性。

    5.单表达式闭包隐式返回

    单行表达式的闭包可以省略return关键字。
    注意:必须是单行表达式的闭包才能省略return关键字

    //单行表达式省略return关键字
    let new3 = arr.sorted(by: { s1, s2 in
        s1 > s2
    })
    ```
    
    ##6.参数名称缩写
    使用闭包来作为参数,swift提供了参数名称缩写功能。就是说,可以使用$0,$1,$2来依次使用参数,即使该参数没有被显式的定义。因此,可以省略掉in关键字和前方的参数。
    ```swift
    //参数名称缩写,$0和$1分别代表s1和s2
    let new4 = arr.sorted(by: { $0 > $1 })
    ```
    
    ##7.运算符方法
    实际上,由于 > 该符号实际上是一个函数,类型为(Int, Int) -> Bool,所以,可以更加简单的写。
    ```swift
    //运算符方法
    let new5 = arr.sorted(by: > )
    ```
    
    ##8.尾随闭包
    如果需要一个很长的闭包表达式作为最后一个参数传递给函数,可以使用尾随闭包来增强可读性。
    ***注意点:1.作为最后一个参数传递给函数。2.使用尾随闭包可以不用写出其它参数标签***
    ```swift
    //尾随闭包
    let new6 = arr.sorted() { $0 > $1 }
    
    //如果闭包表达式是函数或者方法的唯一参数,可以省略()
    let new7 = arr.sorted { $0 > $1 }
    ```
    至此,闭包作为函数或方法参数的简写就写完了。大家应该也能看懂和使用了。

    相关文章

      网友评论

        本文标题:Swift闭包作为函数或方法参数简写

        本文链接:https://www.haomeiwen.com/subject/qqgbtxtx.html