//: Playground - noun: a place where people can play

import UIKit

///////////////////////////////////////////
//
//func sorted(isOrderedBefore:(T, T)->Bool) -> [T]{
//
//} let animals = ["fish", "cat", "chicken", "dog"] //func isOrderedBefore(one : String, two: String) -> Bool
//{
// return one < two
//}
//
//let sortedString = animals.sort(isOrderedBefore) // 与排序 小于号 ,传递核心代码 let sortedString = animals.sort({(one: String, two: String) -> Bool in
return one < two }) // 在sort 函数里面传递了参数 而参数又是一个函数 ,这个函数就叫做闭包 // 闭包 没有完整的函数声明 有参数列表 one: String, two: String
// in关键字后面是闭包的实现代码 // 编译器可以断言出参数的类型
let sortedString2 = animals.sort({(one, two) -> Bool in
return one < two }) // -> Bool 返回值信息也可以 删除掉 这个信息可以再sort的声明中得到< sort 声明>
let sortedString3 = animals.sort({(one, two) in
return one < two }) // 没有返回值类型->bool声明以后 ()也可以去除掉 let sortedString4 = animals.sort({one, two in
return one < two }) // 可以省略执行代码的return语句 编译器已经断言出来返回值是bool 类型
//所执行代码一行,删除return 语句 let sortedString5 = animals.sort({one, two in
one < two
}) //接下来我们还可以省略参数
// one two 没有意义 用参数本地常量进行代替 let sortedString6 = animals.sort({$0 < $1}) //如果传递的闭包是方法或者函数的最后一个参数, 可以将闭包放到闭包的外面
//称为结尾闭包 let sortedString7 = animals.sort(){$0 < $1}
print(sortedString7) // 还可以移除没有参数的括号
let sortedString8 = animals.sort{$0 < $1}
print(sortedString8) //把花括号替换为小括号 只写一个 < 闭包神奇之处
let sortedString9 = animals.sort(>)
print(sortedString9)
//----------------------------------------------
//闭包还可以捕获 上下文中常量或者变量的数值
//甚至原始环境销毁也可以使用 typealias stateMachineType = () ->Int func makeStateMachine(maxState: Int) -> stateMachineType{ var currentState: Int = 0 return{
currentState++
if currentState > maxState{
currentState = 0
}
return currentState
}
} let tt = makeStateMachine(2) print(tt()) print(tt()) print(tt()) print(tt()) print(tt()) // 不管makeStateMachine 是否在生存期内 都可以捕获makeStateMachine里面的 currentState 变量值 一直存在
//闭包可以超越自身的生命周期捕获外面的变量值

swift 闭包 由浅入深 优化的更多相关文章

  1. Swift闭包概念与常见使用场景总结

    ·Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些 ...

  2. swif(六)swift闭包

    // // main.swift // LessonSwiftSix // // Created by keyan on 15/9/13. // Copyright (c) 2015年 keyan. ...

  3. Swift --闭包表达式与闭包(汇编分析)

    在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数! 一.闭包表达式 概念 闭包表达式与定义函数的语法相对比,有区别如下: 去除了func 去除函数名 返回值类型添加了关键 ...

  4. Swift 闭包表达式

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

  5. Swift 闭包(六)

    http://blog.csdn.net/huangchentao/article/details/32714185 闭包 Closures 1.闭包表达式 闭包表达式是一种利用简单语法构建内联包的方 ...

  6. swift 闭包循环引用

    当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用.swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量.例如下面 ...

  7. swift 闭包

    闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着 这些常量和变量,俗称闭包. Swift标准库中提供了sort排序函数,sort函数的第二个参数是个闭包.和OC中的bl ...

  8. [ios][swift]使用swift闭包进行viewcontroller反向传值

    闭包参考:http://c.biancheng.net/cpp/html/2285.html   闭包详解 传值参考:http://www.tuicool.com/articles/vy2uUz Sw ...

  9. swift 闭包简写实际参数名$0、$1等理解

    Swift 自动对行内闭包提供简写实际参数名,你也可以通过 $0 , $1 , $2 等名字来引用闭包的实际参数值. 如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对 ...

随机推荐

  1. POJ3617 简单字符串

    三分之一的通过率的字符串 题意为,输入一个S串,有一个空串T.对S串有两种操作,一是取出S串的头放入T串的尾,二是取出S串的尾放入T串的尾.要求是要使得T串的字典序最小. 从题意来看是一个很明显的贪心 ...

  2. 一次完整的HTTP事务是怎样一个过程?(转)

    (转自http://www.linux178.com/web/httprequest.html)写的太好了,转一个. 关于HTTP协议可以参考以下: HTTP协议漫谈 http://kb.cnblog ...

  3. nosql学习一

    1.NoSQL,泛指非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难 ...

  4. mysql一个表中多个字段对应另一个表的id如何查询?

    比如有如下2个表 a 和baaID b1ID b2ID b3ID1 1 3 52 2 4 6bbID bCon1 苹果2 香蕉3 国内4 国外5 出口6 进口其中a表中的b1ID,b2ID,b3ID都 ...

  5. PHP之路——PHPExcel使用

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGMAAAJkCAIAAAA6GnvRAAAgAElEQVR4nOzd918bV/ov8Pv33Y2RNC

  6. 转:NoSQL更适合担当云数据库吗

    在过去几十年,关系型数据库管理系统一直是数据管理的主要模型,随着Web应用数据规模的显著增长,NoSQL系统逐渐引起关注.领域专家Sherif Sakr分析指出,NoSQL具备的优势(能够水平扩展数据 ...

  7. HDU 2444 The Accomodation of Students(判断是否可图 + 二分图)

    题目大意:有一群人他们有一些关系,比如A认识B, B认识C, 但是这并不意味值A和C认识.现在给你所有互相认识的学生,你的任务是把所有的学生分成两个一组, 住在一个双人房里.相互认识的同学可以住在一个 ...

  8. COALESCE函数

    --SQL学习笔记一 --函数coalesce --功能返回参数中第一个非NULL值 --语法 COALESCE ( expression [ ,n ] ) --创建测试表 IF OBJECT_ID( ...

  9. HashTable与HashMap使用总结

    1.HashTable和HashMap比较 1)继承的父类不同. Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类.但二者都实现了Map接口. publi ...

  10. MD5方法代码(生成小写的md5) C#版本

    public string GetMD5Str(string input) { // Use input string to calculate MD5 hash MD5 md5 = System.S ...