swift 闭包 由浅入深 优化
//: 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 闭包 由浅入深 优化的更多相关文章
- Swift闭包概念与常见使用场景总结
·Swift 闭包 闭包(Closures)是自包含的功能代码块,可以在代码中使用或者用来作为参数传值. Swift 中的闭包与 C 和 Objective-C 中的代码块(blocks)以及其他一些 ...
- swif(六)swift闭包
// // main.swift // LessonSwiftSix // // Created by keyan on 15/9/13. // Copyright (c) 2015年 keyan. ...
- Swift --闭包表达式与闭包(汇编分析)
在Swift中,可以通过func定义一个函数,也可以通过闭包表达式定义一个函数! 一.闭包表达式 概念 闭包表达式与定义函数的语法相对比,有区别如下: 去除了func 去除函数名 返回值类型添加了关键 ...
- Swift 闭包表达式
闭包是功能性自包含模块,可以在代码中被传递和使用. Swift 中的闭包与 C 和 Objective-C 中的 blocks 以及其他一些编程语言中的 lambdas 比较相似. 闭包的形式主要有三 ...
- Swift 闭包(六)
http://blog.csdn.net/huangchentao/article/details/32714185 闭包 Closures 1.闭包表达式 闭包表达式是一种利用简单语法构建内联包的方 ...
- swift 闭包循环引用
当使用闭包时,类本身持有self,然后又在闭包中访问了self或者self的属性,就会导致恶心额循环引用.swift提供的解决方法是在闭包中定义捕获列表,捕获列表是闭包想怎么引用捕获来的变量.例如下面 ...
- swift 闭包
闭包可以捕获和存储其所在上下文中任意常量和变量的引用. 这就是所谓的闭合并包裹着 这些常量和变量,俗称闭包. Swift标准库中提供了sort排序函数,sort函数的第二个参数是个闭包.和OC中的bl ...
- [ios][swift]使用swift闭包进行viewcontroller反向传值
闭包参考:http://c.biancheng.net/cpp/html/2285.html 闭包详解 传值参考:http://www.tuicool.com/articles/vy2uUz Sw ...
- swift 闭包简写实际参数名$0、$1等理解
Swift 自动对行内闭包提供简写实际参数名,你也可以通过 $0 , $1 , $2 等名字来引用闭包的实际参数值. 如果你在闭包表达式中使用这些简写实际参数名,那么你可以在闭包的实际参数列表中忽略对 ...
随机推荐
- STM8S学习笔记-时钟控制2
今天把时钟系统的最后部分,时钟安全系统(CSS)和时钟输出功能(CCO),做一个简答的说明. 1.时钟安全系统(以下简称CSS) CSS功能很简单,就是监控HSE是否实效(如果系统使用HSE作为主时钟 ...
- 转:聊聊并发(八)——Fork/Join框架介绍
1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过 ...
- ARP劫持攻击
今天下午,莫名其妙的产生. 部分客户的网站产生乱码,但本机访问或是好好的. 外网访问,乱码的原文件是一个<IFRAME>网页. 听说,有时ARP攻击是导致网络中断或时断时续. 安全狗和36 ...
- LINUX下中文语言包的安装(转)
在安装盘上已经有各种语言包了,我们只需要找到他们,并安装就可以了.中文的是fonts-chinese-3.02-9.6.el5.noarch.rpmfonts-ISO8859-2-75dpi-1.0- ...
- 跑马灯js
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- LinGo:疏散问题——线性规划,0-1规划
个部门(A.B.C.D.E)组成.现要将它的几个部门迁出甲市,迁至乙市或丙市. (每个城市最多接纳三个部门) 除去因政府鼓励这样做以外,还有用房便宜,招工方便等好处.对这些好处已作出数量估计,其值如下 ...
- 无需转化直接使用ESD映像文件安装系统简明教程
原版系统ISO镜像的sources文件夹中包含install.wim映像文件,将这个WIM文件“解压”(官方术语“Apply”)后,可以看到和C盘的目录完全相同,即为系统文件. 而官方提供的原版ESD ...
- Coding Your Life
前几天看到篇文章,写的是科技让人变得陌生,balabala,总的说来就科技让邻居是男是女不知道了,朋友见面少了之类的.其实我觉得,也不能全怪科技发展的太快,而是人心都飘到网路上了,像我这一辈已经老去的 ...
- Java – 4 Security Vulnerabilities Related Coding Practices to Avoid---reference
This article represents top 4 security vulnerabilities related coding practice to avoid while you ar ...
- 二叉排序树BST代码(JAVA)
publicclassTest{ publicstaticvoid main(String[] args){ int[] r =newint[]{5,1,3,4,6,7 ...