定义

闭包(Closures)是独立的函数代码块,能在代码中传递及使用。

语法

{(parameters) -> return type in
  statements
} 注:闭包表达式语法可以使用常量参数、变量参数和 inout 类型作为参数,但皆不可提供默认值。

范例

func funA(var value : String,closure: (str : String) -> ()) {
closure(str:value)
} func closureA(var str : String){
println("closureA : Hi , " + str)
}
func closureB(var str : String){
println("closureB : Hi , " + str)
} funA("cosmokey",closureA) //closureA : Hi , cosmokey
funA("cosmokey",closureB) //closureB : Hi , cosmokey
funA("cosmokey",{(var str : String) in println("closureC : Hi , " + str)}) //closureC : Hi , cosmokey

语法糖

根据上下文推断类型
funA("cosmokey",{str in println("closureD : Hi , " + str)}) //closureD : Hi , cosmokey 参数名简写
funA("cosmokey",{println("closureE : Hi , " + $)}) //closureE : Hi , cosmokey 运算符函数
sort(names, >) //sort(names, { (s1: String, s2: String) -> Bool in return s1 > s2 } )

Trailing 闭包

注:Trailing 闭包是一个书写在函数括号之外(之后)的闭包表达式,函数支持将其作为最后一个参数调用。

funA("cosmokey"){
str in println("closureF : Hi , " + str) //closureF : Hi , cosmokey
}

系统常见闭包:map、filter和reduce

map

    map 可以把一个数组按照一定的规则转换成另一个数组

    定义

        func map<U>(transform: (T) -> U) -> U[]

    范例
var oldArray = ["Ping","Cosmokey"]
var newArray = oldArray.map(){"Hi , " + $} //["Hi , Ping","Hi , Cosmokey"]
filter

    filter 起到的就是筛选的功能,参数是一个用来判断是否筛除的筛选闭包

    定义

        func filter(includeElement: (T) -> Bool) -> [T]    

    范例

        var oldArray = ["Ping","Cosmokey","MM"]
var newArray = oldArray.filter(){count($) > } //["Ping", "Cosmokey"]
reduce

    reduce 函数解决了把数组中的值整合到某个独立对象的问题。

    定义

        func reduce<U>(initial: U, combine: (U, T) -> U) -> U

    范例

        var oldArray = ["C","o","s","m","o","k","e","y"]
var newArray = oldArray.reduce("Hi , "){
var newValue = $ + $
println(newValue)
return newValue
}
/*
Hi , C
Hi , Co
Hi , Cos
Hi , Cosm
Hi , Cosmo
Hi , Cosmok
Hi , Cosmoke
Hi , Cosmokey
*/
println(newArray) //Hi , Cosmokey

Swift学习(三):闭包(Closures)的更多相关文章

  1. Swift学习:闭包(Closures)

    /* 闭包(Closures)* 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.* 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类 ...

  2. Swift 学习笔记 (闭包)

    闭包是可以在你的代码中被传递和饮用的功能性独立模块.Swift中的闭包和C以及Objective-C中的Block很像,和其他语言中的匿名函数也很像. 闭包能捕获和存储定义在其上下文中的任何常量和变量 ...

  3. Swift 学习- 08 -- 闭包

    // 闭包是自包含的函数代码块, 可以在代码中被传递和使用, swift 中的闭包 与 C语言 和 OC 中的代码块 (blocks) 以及其他一些编程语言中的匿名函数比较类似 // 闭包可以捕获和存 ...

  4. Swift学习三

    http://blog.csdn.net/kuloveyouwei/article/details/36005299 Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集 ...

  5. Swift学习之十四:闭包(Closures)

    * 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. * 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas ...

  6. The Swift Programming Language-官方教程精译Swift(8)闭包 -- Closures

    闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包可以捕获和存储其 ...

  7. Swift学习笔记之闭包

    简介 (真的很简) 闭包的完整形态是这个样子的: { (parameters) -> returnType in statements } 写在一行里就是这样: {(parameters) -& ...

  8. Swift编程语言学习6—— 闭包

    闭包是自包括的函数代码块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其它一些编程语言中的 lambdas 函数比較类似.   闭 ...

  9. Swift:闭包(Closures)

    一. 基本概念 闭包(Closures)是自包括的功能代码块,能够在代码中使用或者用来作为參数传值. 在Swift中的闭包与C.OC中的blocks和其他编程语言(如C#)中的lambda, java ...

  10. swift学习第十五天:闭包

    闭包 闭包的介绍 闭包和OC中的block非常相似 OC中的block是匿名的函数 Swift中的闭包是一个特殊的函数 block和闭包都经常用于回调 注意:闭包和block一样,第一次使用时可能不习 ...

随机推荐

  1. webpack继续

    序言:继续上一篇<webpack初入> 1.上一篇配置完成后最终的命令是:webpack,如果更改package.json中的一个配置如下: 换为 此时最终的命令:npm start等同于 ...

  2. Object.prototype和Function.prototype一些常用方法

    Object.prototype 方法: hasOwnProperty 概念:用来判断一个对象中的某一个属性是否是自己提供的(主要是判断属性是原型继承还是自己提供的) 语法:对象.hasOwnProp ...

  3. 使用原生JS封装一个ajax

    function ajax(data){ //第一步,创建XHR对象 var xhr = null; if(window.XMLHttpRequest){ xhr = new XMLHttpReque ...

  4. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(三)显示地图坐标系模块

    config.xml文件的配置如下: <widget left="3" bottom="3" config="widgets/Coordinat ...

  5. 实现UITextView的placeholder

    我们知道在iOS开发时,控件UITextField有个placeholder属性,UITextField和UITextView使用方法基本类似,有两个小区别:1.UITextField单行输入,而UI ...

  6. 几个常用的adb命令

    adb全程为Android Debug Bridge,字面意思就是安卓调试桥接.就是android系统提供的一套 工具帮我们建议一个连接android设备的通道,然后在电脑上发送一些指令,完成工作. ...

  7. 深入浅出React Native 1: 环境配置

    该教程主要介绍如何用react native来开发iOS,所以首先,你需要有一台mac,当然黑苹果也是可以的~ 创建一个react native的项目只需要安装以下五个组件~~(但....坑爹的是,不 ...

  8. 记CentOS-7-x86_64-DVD-1503与Windows7单硬盘双系统的安装

    我最初的设想是:Win引导CentOS,最后却变成了CentOS引导Win了.算是‘弄拙成巧’了吧. 因为我打算用U盘刻录镜像直接从U盘启动,所以不需要网上一些教程里面的繁琐的win下引导CentOS ...

  9. iOS开发之聊天模块--内容保存逻辑实现

    需求详解: 在实际开发中,有可能是在后期优化的时候,会有这么需要优化的需求:聊天输入框保存之前输入的文本,提高用户的良好体验. 在聊天模块中,用户可能会在输入框输入若干字符,但是没有点击发送就点击退出 ...

  10. Linux - expect自动化远程登录脚本

    简单模式: #!/usr/bin/expect -f spawn ssh root@192.168.0.1 expect "*assword*" send "root\r ...