Swift学习笔记-闭包

作者: 土豆吞噬者 | 来源:发表于2018-10-22 23:50 被阅读3次

    闭包(closure)是一种更加紧凑,轻量的匿名函数,类似于Java中的lambda表达式

    swift中的闭包语法如下

    {(parameters)->returnType in
    ...
    }
    

    接下来我们看一段数组排序代码, 该代码将函数sortAsc当做参数传递

    let counts=[1,10,6,2,50,8,24]
    
    func sortAsc(n1:Int,n2:Int)->Bool
    {
        return n1<n2
    }
    //[1, 2, 6, 8, 10, 24, 50]
    print(counts.sorted(by: sortAsc))
    

    由于闭包也是函数的一种,所以我们可以使用闭包语法修改上面的代码

    let counts=[1,10,6,2,50,8,24]
    
    print(counts.sorted(by: {
        (n1:Int,n2:Int) -> Bool in
        return n1<n2
    }))
    

    闭包可以利用swift的类型推断系统,所以我们可以省略类型信息
    由于return n1<n2会返回Bool,所以返回值类型可以省略
    由于这里只有一个表达式return n1<n2,所以return语句可以省略

    let counts=[1,10,6,2,50,8,24]
    print(counts.sorted(by: {n1,n2 in n1<n2}))
    

    使用快捷参数名省略参数命名和in,其中0代表第一个参数,1代表第二个参数,依此类推

    let counts=[1,10,6,2,50,8,24]
    print(counts.sorted(by: {$0<$1}))
    

    如果闭包是函数的唯一参数,则可以省略圆括号以及参数名

    let counts=[1,10,6,2,50,8,24]
    print(counts.sorted{$0<$1})
    

    相关文章

      网友评论

        本文标题:Swift学习笔记-闭包

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