Swift学习(三):闭包(Closures)
定义
闭包(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)的更多相关文章
- Swift学习:闭包(Closures)
/* 闭包(Closures)* 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值.* 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas类 ...
- Swift 学习笔记 (闭包)
闭包是可以在你的代码中被传递和饮用的功能性独立模块.Swift中的闭包和C以及Objective-C中的Block很像,和其他语言中的匿名函数也很像. 闭包能捕获和存储定义在其上下文中的任何常量和变量 ...
- Swift 学习- 08 -- 闭包
// 闭包是自包含的函数代码块, 可以在代码中被传递和使用, swift 中的闭包 与 C语言 和 OC 中的代码块 (blocks) 以及其他一些编程语言中的匿名函数比较类似 // 闭包可以捕获和存 ...
- Swift学习三
http://blog.csdn.net/kuloveyouwei/article/details/36005299 Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集 ...
- Swift学习之十四:闭包(Closures)
* 闭包(Closures) * 闭包是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. * 在Swift中的闭包与C.OC中的blocks和其它编程语言(如Python)中的lambdas ...
- The Swift Programming Language-官方教程精译Swift(8)闭包 -- Closures
闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包可以捕获和存储其 ...
- Swift学习笔记之闭包
简介 (真的很简) 闭包的完整形态是这个样子的: { (parameters) -> returnType in statements } 写在一行里就是这样: {(parameters) -& ...
- Swift编程语言学习6—— 闭包
闭包是自包括的函数代码块,能够在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其它一些编程语言中的 lambdas 函数比較类似. 闭 ...
- Swift:闭包(Closures)
一. 基本概念 闭包(Closures)是自包括的功能代码块,能够在代码中使用或者用来作为參数传值. 在Swift中的闭包与C.OC中的blocks和其他编程语言(如C#)中的lambda, java ...
- swift学习第十五天:闭包
闭包 闭包的介绍 闭包和OC中的block非常相似 OC中的block是匿名的函数 Swift中的闭包是一个特殊的函数 block和闭包都经常用于回调 注意:闭包和block一样,第一次使用时可能不习 ...
随机推荐
- Easticsearch通信方式_API
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch概念 a. Elasticsearch是一个基于Luc ...
- .NET 数据类型转换 方法
using Newtonsoft.Json;using Newtonsoft.Json.Converters;using System.Web.Script.Serialization; /// &l ...
- 字体属性设置(一):谷歌浏览器12px以下字体的显示;方法和原理
前言: chrome 谷歌浏览器默认的字体大小为16px:可以通过设置font-size来设置字体大小但是当设置到12px以下的时候字体大小不再改变:对于想设置其他大小的字体就很头疼,本文参考网上的方 ...
- windows下React-native 环境搭建
公司决定试水react-native,mac审批还没下来,没办法,先用windows硬着头皮上吧. 参考文章: React Native 中文网官方文档 史上最全Windows版本搭建安装React ...
- O365(世纪互联)SharePoint 之站点个性化
前言 上一篇文章中,我们简单介绍了如何使用O365中SharePoint Online文档库,SharePoint Online的优点就是提供给我们很多非常方便开箱即用的功能,让我们快速的搭建站点,方 ...
- Set up Github Pages with Hexo, migrating from Jekyll
Set up Github Pages with Hexo, migrating from Jekyll. 本文介绍用Hexo建立github pages, 其中包含了从Jekyll迁移过来的过程. ...
- KVC&&&KVO
KVC 什么是KVC --->What KVC指的就是NSKeyValueCoding非正式协议. KVC是一种间接地访问对象的属性的机制. 这种间接表现在通过字符串来标识属性,而不是通过调用存 ...
- JAVA实现图片裁剪
/** * 裁剪图片 * @param src 源图片 * @param dest 裁剪后的图片 * @param x 裁剪范围的X坐标 * @param y 裁剪范围的Y坐标 * @param w ...
- Hadoop系列教程<一>---Hadoop是什么呢?
Hadoop适合应用于大数据存储和大数据分析的应用,适合于服务器几千台到几万台的集群运行,支持PB级的存储容量.Hadoop典型应用有:搜索.日志处理.推荐系统.数据分析.视频图像分析.数据保存等.但 ...
- 多行图片hover加边框兼容IE7+
问题: 遇到多行多列排列的图片时,hover上去加边框会把下面的图片挤到别处 ============================================================ ...