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)非常相似 .这个大家必须掌握!必须掌握! 必须掌握 ...
随机推荐
- 页面嵌入QQ功能(点QQ建立一个临时会话,显示在页面的固定位置)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [HTML5] Add an SVG Image to a Webpage and Get a Reference to the Internal Elements in JavaScript
We want to show an SVG avatar of the patio11bot, so we'll do that in three ways: Using an img tag - ...
- [Functional Programming ADT] Initialize Redux Application State Using The State ADT
Not only will we need to give our initial state to a Redux store, we will also need to be able to re ...
- Jenkins +JUnit
转载:https://www.cnblogs.com/helloIT/p/5761740.html 1.环境 windows10 专业版 Jenkins 2.7 apache-ant-1.9.6 JD ...
- Java经典算法汇总之冒泡排序
冒泡排序基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时 ...
- 适用于iOS6之后的苹果提供的下拉刷新
一:iOS6.0及以后: 下拉刷新控件UIRefreshControl TableView属性:refreshControl 二:使用 - (void)colseTheTB { [self dismi ...
- Android Studio修改项目名和包名
为了提高开发效率,有时候需要使用现有的一些开源项目,记录一下自己修改项目名和包名的方法. 1.首先,修改包名(清单文件里找), ①展开所有包 ②选中想要修改的包,shift+F6(也可右键Refact ...
- 算法笔记_063:蓝桥杯练习 送分啦(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 这题想得分吗?想,请输出“yes”:不想,请输出“no”. 输出格式 输出包括一行,为“yes”或“no”. 2 解决方案 初步一看,这题 ...
- JDBC操作,执行数据库更新操作
目标: 使用Connection对象取得Statement实例 使用Statement进行数据增删改. Statement接口 要对数据库操作,要使用Statement完成.此接口可以使用Connec ...
- Centos 6.4 python 2.6 升级到 2.7一起的MySQLdb不能使用的解决问题
查看python的版本#python -V Python 2.6.6 1.下载Python-2.7.3#wget http://python.org/ftp/python/2.7.3/Python-2 ...