Swift闭包简述
来源:互联网 发布:域名映射ip 端口 编辑:程序博客网 时间:2024/06/05 20:05
首先了解闭包之前先要了解嵌套函数。
嵌套函数是一种在较复杂函数中方便进行命名和定义自包含代码模块的方式。嵌套函数是闭包最简单的形式。
定义在函数体中的函数,称为嵌套函数(nested functions)。
默认情况下,嵌套函数是对外是不可见的,但可以被封闭他们的函数(enclosing function)调用。封闭函数可以返回它的一个嵌套函数,使这个函数在其他域中可以被使用。
//以下是一个嵌套函数的例子
funcGetMathfunc(type:String)->(Int)->Int
//定义该函数的返回类型为(Int)->Int,并根据参数选择返回不同的嵌套函数
{
func square(val:Int)->Int
{
return val*val
}
func cube(val:Int)->Int
{
return val*val*val
}
func factorial(val:Int)->Int
{
var result = 1;
for index in 2...val
{
result*=index
}
return result
}
//定义了三个嵌套函数
switch(type)
{
case "square":
return square
case "cube":
return cube
default:
return factorial
}
}
varmathFunc = GetMathfunc(type:"cube")
//调用mathFunc函数的时候返回的不是一个具体的值,而是一个函数cube的指针,这个指针指向变量mathFunc,所以mathFunc此时等同于cube函数,下面另外两个函数同理
print(mathFunc(5))//125
mathFunc= GetMathfunc(type:"square")
print(mathFunc(5))//25
mathFunc= GetMathfunc(type:"factorial")
print(mathFunc(5))//120
funcGetMathfunc(type:String)->(Int)->Int
//定义该函数的返回类型为(Int)->Int,并根据参数选择返回不同的嵌套函数
{
func square(val:Int)->Int
{
return val*val
}
func cube(val:Int)->Int
{
return val*val*val
}
func factorial(val:Int)->Int
{
var result = 1;
for index in 2...val
{
result*=index
}
return result
}
//定义了三个嵌套函数
switch(type)
{
case "square":
return square
case "cube":
return cube
default:
return factorial
}
}
varmathFunc = GetMathfunc(type:"cube")
//调用mathFunc函数的时候返回的不是一个具体的值,而是一个函数cube的指针,这个指针指向变量mathFunc,所以mathFunc此时等同于cube函数,下面另外两个函数同理
print(mathFunc(5))//125
mathFunc= GetMathfunc(type:"square")
print(mathFunc(5))//25
mathFunc= GetMathfunc(type:"factorial")
print(mathFunc(5))//120
闭包表达式
Swift提供了简洁的闭包表达式来创建闭包
{(形参列表) ->返回值类型 in
//零条到多条的可执行语句
}
//零条到多条的可执行语句
}
//定义一个计算平方的闭包表达式
var square = {(val: Int) ->Int in
return val*val
}
var square = {(val: Int) ->Int in
return val*val
}
调用闭包
varsquare = {(val: Int)->Intin
return val*val
}
print(square(5))//25
print(square(3))//9
return val*val
}
print(square(5))//25
print(square(3))//9
//闭包被赋值给square变量,因此程序可以通过调用该变量来调用该闭包
//第二种调用形参方式
varresult = {(a:Int,b:Int)->Intin
return a*b
}(2,3)
print(result)//6
/*
*这种调用方式没有将闭包赋值给任何变量而是在定义闭包的同时调用该闭包
*闭包后面的圆括号(2,3)直接调用闭包并且直接传入对应的参数
*所以result的不是方法而是值
*/
varresult = {(a:Int,b:Int)->Intin
return a*b
}(2,3)
print(result)//6
/*
*这种调用方式没有将闭包赋值给任何变量而是在定义闭包的同时调用该闭包
*闭包后面的圆括号(2,3)直接调用闭包并且直接传入对应的参数
*所以result的不是方法而是值
*/
Swift的闭包表达式还拥有简洁的风格,并鼓励在常见场景中以实现语法优化,主要优化有下面几种:
- 利用上下文推断参数和返回值类型
- 单表达式(single-expression)闭包可以省略 return 关键字
- 参数名称简写
- Trailing 闭包语法
1 0
- Swift闭包简述
- Groovy闭包简述
- 【Swift初见】Swift闭包
- Swift 闭包(六)
- Swift之闭包
- swift closure 闭包
- swift,闭包
- Swift闭包表达式
- [Swift]闭包
- Swift 闭包
- 7.Swift-闭包
- Swift-闭包
- Swift 闭包
- Swift-Closures 闭包
- swift 闭包(closure)
- 【swift-总结】闭包
- swift闭包总结
- swift中的闭包
- 聊聊数据可视化的那些事及常用工具!
- make管理工具和Makefile
- MAC +XAMPP+PHPStorm+Xdebuge配置PHP开发环境终极解决方案
- Apache 与 Nginx 比较
- 用js在console中输出企业招聘信息
- Swift闭包简述
- TMS320C6000 DSP-----Cache 优化
- 【Hadoop】Hadoop官方文档翻译——MapReduce Tutorial
- jvm 基本结构 一
- MFC 菜单自绘
- RAML基本语法
- EditText限制输入emoji表情总结
- 做嵌入式linux驱动的前途何在
- (function($){...})(jQuery) 和 $(function(...){})的异同