Swift闭包表达式语法
来源:互联网 发布:错生网络剧未删减资源 编辑:程序博客网 时间:2024/06/01 15:49
闭包表达式语法
闭包表达式语法有如下的一般形式:
- 1
{ (parameters) -> (return type) in
statements
}
parameters–形式参数类型
type – 返回值类型
statements – 函数体
例如:
let bibao = {( num :Int , num1:Int) -> Int in return num + num1 } let get1 = bibao(20,30) print("bibao de jieguo \(get1)")
输出结果:bibao de jieguo 50- 2
//模式2 用一行书写 let bibao = {( num :Int , num1:Int) -> Int in return num + num1}
- 3
//模式3 省略 形式参数类型,只使用返回值类型 let bibao = {num , num1 -> Int in return num + num1 }
捕获值
一个闭包能够从上下文捕获已被定义的常量和变量。即使定义这些常量和变量的原作用域已经不存在,闭包仍能够在其函数体内引用和修改这些值。
func bibao2 (number num3:Int,number11 num4:Int) -> () -> Int{ var num5 = 4; func add() -> Int{ num5 += num4; num5+=num3 return num5 } return add } let get2 = bibao2(number: 5,number11: 100) print(get2())
输出结果:109
分析:定义闭包bibao2,包含一个内嵌函数,可以捕获上文的传入参数num3,num4及内部定义变量num5, 返回add 作为一个闭包,bibao2的返回类型是() -> Int,说明返回的是一个函数,不需要任何形式参数,每次调用返回一个返回值为Int类型的函数,赋值给get2,最后调用get2(),即内部函数add(),得到函数调用的结果
如果打印三次:print(get2())
结果: 109 214 319
说明每次都捕获了上下文常亮
如果这是个定义了get3;
let get3 = bibao2(number: 10,number11: 10) print(get3())
输出结果:24
说明新的闭包实例,回创建新的独立的num5,闭包和实例之间建立一个强引用环
自动闭包
var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]print(customersInLine.count)// Prints "5"let customerProvider = { customersInLine.remove(at: 0) }print(customersInLine.count)// Prints "5"print("Now serving \(customerProvider())!")// Prints "Now serving Chris!"print(customersInLine.count)// Prints "4"
尽管 customersInLine 数组的第一个元素以闭包的一部分被移除了,但任务并没有执行直到闭包被实际调用。
如果闭包永远不被调用,那么闭包里边的表达式就永远不会求值。注意 customerProvider 的类型不是 String 而是 () -> String ——一个不接受实际参数并且返回一个字符串的函数
同理
当你传一个闭包作为实际参数到函数的时候,你会得到与延迟处理相同的行为。
// customersInLine is ["Alex", "Ewa", "Barry", "Daniella"]func serve(customer customerProvider: () -> String) { print("Now serving \(customerProvider())!")}serve(customer: { customersInLine.remove(at: 0) } )// Prints "Now serving Alex!"
传递一个形式参数为customer,类型为函数() 的函数{ customersInLine.remove(at: 0) }
作为实际参数给save函数,返回一个字符串
阅读全文
0 0
- Swift闭包表达式语法
- 6.2 Swift闭包表达式的语法
- 6.4 Swift闭包表达式语法优化
- Swift闭包表达式
- Swift闭包表达式
- Swift 闭包表达式
- Swift闭包表达式
- swift基础语法--闭包
- Swift语法14.闭包
- Swift使用闭包表达式
- Swift基础语法: 23 - Swift的闭包简介, Sorted函数, 闭包的表达式语法, 根据上下文推断类型, 参数名简写, 运算符函数
- Swift weakSelf 在闭包语法
- Swift语法基础:3 - Swift的函数和闭包
- swift学习之三:闭包表达式
- Swift 闭包表达式-来自CocoaChina
- Swift 基础语法三--函数和闭包
- C# 委托,Lambda表达式 and Swift 委托,闭包
- 6.3 Swift闭包表达式作为回调函数
- [11.2]日常模拟.2
- java基础巩固(一)---封装
- 【Openjudge】文本二叉树
- Matlab绘图-很详细,很全面
- ES6-数值的扩展-安全整数和 Number.isSafeInteger()
- Swift闭包表达式语法
- Jzoj5444【NOIP2017提高A组冲刺11.2】救赎
- session
- 设备开机自动挂载
- MapReduce/Hadoop的TopN解决方案之键不唯一的情况
- 使用Netscope(神经网络结构在线可视化工具 )绘制网络结构视图
- eclipse如何设置导航栏的背景颜色
- 问题:Vue.set更新视图的问题及Vue.set和vm.$set的区别
- 多线程之pthread_once和pthread_key