美文网首页
Swift基础之闭包

Swift基础之闭包

作者: 子键_北京不眠夜 | 来源:发表于2016-07-21 19:01 被阅读11次

闭包

Swift对闭包进行了简化:

  • 利用上下文推断参数和返回值类型
  • 隐式返回单表达式闭包,即单表达式闭包可以省略return关键字
  • 参数名称缩写
  • 尾随(Trailing)闭包语法

1.1 闭包表达式语法

swift中闭包的一版形式如下:

{ (parameters) -> returnType in
     statements
}

下面我们用内联闭包实现数组的升序排列,
函数的最后一个参数是闭包时()可以省略;
注意:此时闭包的参数和返回值类型要和函数声明相同,(Self.Generator.Element, Self.Generator.Element) -> Bool

var resultName2 = usernames.sort { (s1: String, s2: String) ->  Bool in return s1 < s2}
//resultName2 : ["Cc", "Lecoding", "Lves", "Wildcat"]

1.2 根据上下文推断类型(Inferring Type From Context)

上面的内联闭包书写还可以更加精简,因为sort(_:)函数需要的函数参数类型已知即:(String, String) -> Bool,
因为所有的类型都可以被正确推断,返回箭头(->)和围绕在参数周围的括号也可以被省略:

var resultName3 = usernames.sort { s1, s2 in
    return s1 > s2
}
//["Wildcat", "Lves", "Lecoding", "Cc"]

1.3 单表达式闭包隐式返回

单行表达式闭包可以通过省略return关键字来隐式返回单行表达式的结果

var resultName4 = usernames.sort { s1, s2 in s1 > s2 }

1.4 参数名称缩写

如果你觉得还不够精简,当然还有更加精简的:
内联闭包可以省略参数名直接用参数顺序$0,$1,$2调用.

var resultName5 = usernames.sort ({ $0 > $1 })

1.5 运算符函数(Operator Functions)
对于上边的排序函数,你觉得内联闭包书写是最精简了,那你就错了。

Swift的String类型定义了关于大于号(>)的字符串实现,其作为一个函数接受两个String类型的参数并返回Bool类型的值。而这正好与sort(_:)方法的第二个参数需要的函数类型相符合。

2. 尾随闭包(Trailing Closures))

尾随闭包是一个书写在函数括号之后的闭包表达式,函数支持将其作为最后一个参数调用:
下面先定义一个计算函数,参数为:两个整数和一个函数类型参数

func caculateTwoNumbers(num1: Int, num2: Int, CaluFunction: (Int, Int) -> Int) -> Int{ return CaluFunction(num1, num2)}
//内联闭包形式,不使用尾随闭包,求和
var numReult1 = caculateTwoNumbers(2, num2: 3,CaluFunction: {(num1: Int, num2: Int) -> Int in return num1 + num2})
//5//使用尾随闭包,求乘机
var numReult2 = caculateTwoNumbers(3, num2: 4) { $0 * $1 }numReult2 //7

4.闭包是引用类型(Closures Are Reference Types)

和类一样,闭包也是引用类型

相关文章

  • swift闭包学习

    闭包作为参数 参考 Swift学习之闭包

  • Swift 基本语法(函数, 闭包)

    前言 接上篇, 这篇聊一下 Swift中的 函数, 闭包 一 函数 二 闭包 Swift 基础 先介绍三篇, ...

  • Swift基础之闭包

    闭包 Swift对闭包进行了简化: 利用上下文推断参数和返回值类型 隐式返回单表达式闭包,即单表达式闭包可以省略r...

  • Swift基础之闭包

    闭包 Swift对闭包进行了简化: 利用上下文推断参数和返回值类型 隐式返回单表达式闭包,即单表达式闭包可以省略r...

  • 托XX福写个Swift闭包教程

    闭包基础知识 Swift闭包和OC的block类似不过还是有点区别 OC的block是一个匿名函数 Swift 中...

  • Swift3.0_闭包(Closure)

    闭包基础 ** 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objecti...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • Swift基础-- 闭包

    一,闭包的定义 闭包是自包含的函数代码块,可以在在代码中被传递和使用。 闭包能捕获和存储骑在上下文中任意常量和变量...

  • swift - 闭包基础

    闭包 closure 闭包在Swift中应用广泛,在许多系统库方法中都能看到。 无名本质是函数使用时注意循环引用 ...

网友评论

      本文标题:Swift基础之闭包

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