Swift-7-闭包
// Playground - noun: a place where people can play import UIKit // swift 中闭包与C和OC中的blocks比较相似
// 1. 利用上下文推断参数和返回值类型 2. 单表达式闭包可以省略return关键字 3. 参数名称简写 4. Trailing闭包语法
// 闭包表达式 in 表示 参数及返回值 已经表达完毕,后面是包体
/**
{(parmeters) -> return type in
statements
}
*/ var names = ["Anna", "Alex", "Ewa", "Barry", "Daniella"]
sorted(names, { (s1 : String, s2 : String) -> Bool in
return s1 > s2 // 单表达式闭包可以省略return关键字 此处的return可以省略
}) // 从上下文推断类型
// 当闭包作为参数方法参数使用时,因为方法内的参数已经有类型了(String, String) -> Bool ,swift可以从上下文推断出该闭包的参数与返回值,因此闭包的参数和返回值可以省略
sorted(names, { s1, s2 in
return s1 > s2
}) // 参数名简写 使用 $ + 数字 引用推断出的参数 0 表示第一个
sorted(names, {return $ > $}) // 这里官方文档说return可以省略,但是Xcode一直报错说有歧义 解决办法 {$0 as String > $1 as String} 明确声明$0 $1为String即可 // swift 中对于 string >方法表示接收2个String类型的参数,返回一个Bool值,刚好和闭包吻合,可以直接传入
sorted(names, >) // Trailing Cloures 使用情景:如果你使用了一个闭包作为一个方法的最后一个参数并且闭包很长
func someFunctionTakesCloures(cloures : () -> ()) {
println("do some thing")
} // 不使用trailing cloures调用
someFunctionTakesCloures({
// 这里实现闭包
}) // 使用trailing cloures
someFunctionTakesCloures() {
// 这里实现闭包
} // 如果闭包是该方法的唯一参数并且你使用了trailing cloures,调用方法时可以省略 ()
someFunctionTakesCloures {
// 这里实现闭包
} // 使用trailing cloures调用sorted方法
sorted(names) {return $ > $} // 捕获值
func makeInCrementor(forIncrement amount: Int) -> () -> Int {
var runningTotal =
func incrementor() -> Int {
runningTotal += amount
return runningTotal
}
return incrementor
}
// 方法 incrementor 没有参数,但是它可以从上下文中捕获变量使用
Swift-7-闭包的更多相关文章
- Swift: 比较Swift中闭包传值、OC中的Block传值
一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...
- Swift:闭包
一.闭包的介绍 闭包表达式(Closure Expressions) 尾随闭包(Trailing Closures) 值捕获(Capturing Values) 闭包是引用类型(Closures Ar ...
- Swift学习--闭包的简单使用(三)
一.Swift中闭包的简单使用 override func viewDidLoad() { super.viewDidLoad() /** 闭包和OC中的Block非常相似 OC中的block类似于匿 ...
- iOS - Swift Closure 闭包
1.Closure 闭包在 Swift 中非常有用.通俗的解释就是一个 Int 类型里存储着一个整数,一个 String 类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很 ...
- Swift使用闭包表达式
Swift中的闭包表达式很灵活,其标准语法格式如下:{ (参数列表) ->返回值类型 in 语句组}其中,参数列表与函数中的参数列表形式一样,返回值类型类似于函数中的返回值类型,但不同的是 ...
- Swift的闭包(一):闭包简介、闭包表达式的优化
定义:Closures are self-contained blocks of functionality that can be passed around and used in your co ...
- swift 深入理解Swift的闭包
我们可用swift的闭包来定义变量的值. 先来一个简单的例子大家先感受感受. 定义一个字符串的变量的方法: 直接赋值 var str="JobDeer" 还可以用闭包的方式定义: ...
- Swift逃逸闭包之见解
Swift 逃匿闭包顾名思义,就是闭包想要逃跑.当闭包作为参数传给一个方法时,在这个方法被调用完后闭包却还没有被执行,而是等到方法执行完后才调用 基本都是跨线程的时候才会有逃逸闭包这个说法.因为异步 ...
- Swift:闭包(Closures)
一. 基本概念 闭包(Closures)是自包括的功能代码块,能够在代码中使用或者用来作为參数传值. 在Swift中的闭包与C.OC中的blocks和其他编程语言(如C#)中的lambda, java ...
- Swift之闭包
swift中闭包是一个非常强大的东西,闭包是自包括的函数代码块,能够在代码中被传递和使用.跟C 和 Objective-C 中的代码块(blocks)非常相似 .这个大家必须掌握!必须掌握! 必须掌握 ...
随机推荐
- Solidworks如何设置零件材料,如何评估零件质量
右击材质,然后编辑材料,在弹出菜单中在Solidworks materials中选择零件材料(一般钢或者铁,注意质量密度是否跟你需要的一致),完成之后点击应用和关闭 在评估-质量属性中可以看到当前 ...
- AutoCAD .NET二次开发(二)
今天专门讲一个--CommandMethod.我们都在知道CAD操作要快,必须要熟悉掌握各种命令.在Lisp开发中,在函数后C:即可添加一个命令,非常方法,在.NET API也可以非常方便的设置命令, ...
- java类与对象_成员变量和局部变量区别
成员变量和局部变量:1.成员变量:再类中定义,用来描述对象将要有什么.2.局部变量:在类的方法中定义,在方法中临时保存数据.区别:1.作用域不同: 局部:仅限于定义它的方法 成员:整个类中都是可见 ...
- Android colors.xml 颜色列表
android 常用项 <?xml version="1.0" encoding="utf-8"?> <resources> <c ...
- iOS mac添加证书 不能修改“System Roots”钥匙串错误
iOS mac添加证书 不能修改“System Roots”钥匙串错误 如图: 解决方式: 打开钥匙串---登录---,直接把证书拖过来 然后,查看--我的证书,里面,找到证书,即可
- 利用JMX来监控大部分java应用
JMX(JavaManagement Extensions,即Java管理扩展)是一个为应用程序.设备.系统等植入管理功能的框架.JMX可以跨越一系列异构操作系统平台.系统体系结构和网络传输协议,灵活 ...
- css position: relative | absolute | static | fixed详解
static(静态):没有特别的设定,遵循基本的定位规定,不能通过z-index进行层次分级. fixed(固定定位):这里所固定的参照对象是可视窗口而并非是body或是父级元素.可通过z-index ...
- centos无法安装vmvare-tools的问题
不要使用 vmware 自带的 tools, 版本太老了. 从这里下载:https://github.com/rasa/vmware-tools-patches.git 直接下载或者使用下面的命令: ...
- Python 代码块左移或右移
(就 IDE 是 PyCharm 来说) 选中代码块: 1)右移:直接 Tab 2)左移:Shift + Tab Python 对代码对齐要求很严格的. Python的对齐方式很重要,对齐方式决定了 ...
- HTTP协议,详解
整合网上各种资料,原创,不懂可以加 QQ:3111901846 一般学习一样新的知识,你首先要问问自己这三个问题,如果学完以后,你能回答出来这几个问题,证明你还是不错的 1.什么是HTTP协议?2.H ...