嵌套函数

函数分为全局函数和局部函数,前面已经介绍了全局函数,下面介绍下局部函数,定义在函数体内部的函数可以成为嵌套函数。
注意:嵌套函数对外是隐蔽的,只能在其封闭函数内有效,嵌套函数只能在其封闭函数内有效,其封闭函数也可以返回嵌套函数,以便于程序在其他作用域内使用嵌套函数。

func Math(#type:String)->(Int)->Int
{func square(val:Int)->Int{return val*val
}func cube(val:Int)->Int{return val*val*val}switch(type){case "square":return squarecase "cube":return cubedefault:print("没有该函数")}
}
var mathFunc=Math(type:"cube")//先得到cube函数,调用权利给mathFunc
print(mathFunc(5))调用cube函数,输出125
var mathFunc=Math(type:"square")//先得到square函数,调用权利给mathFuncprint(mathfunc(5))调用square函数,输出25

闭包

闭包是一种新的语法,跟Object-C的代码块一样,更加灵活性。

其实函数也可以算的上闭包处理

* 全局函数是一个有名称、但不会捕捉任何值的闭包。
* 嵌套函数是一个有名字、可以捕获封闭函数体的值的闭包。
* 闭包表达式是一个简单的、可以捕获封闭函数体的值的匿名闭包。func Math(#type:String)->Int->Int{switch(type){case "square":return {(val:Int)->Int inreturn val*val}case "cube":return {(val:Int)->Int inreturn val*val*val}default:print("没有该函数")}}var mathFunc=Math(type:"cube")print(mathFunc(5))

闭包与嵌套函数存在的区别
* 定义闭包无须func关键字,无须制定函数名。
* 定义闭包需要额外使用in关键字。
* 定义闭包的第一个花括号要移到形参列表的圆括号之前。
标准语法如下:

    {(形参列表)->返回值类型 in//核心代码 }

闭包的本质是更加灵活的代码块,因此完全可以将闭包赋值给变量或直接调用闭包。

var square={(val:Int)->Int in
return val*val
}
print(square(5))
var result=(#base:Int,#exponent:Int)->Int in
var result = 1
for i in 1...exponent
{result *=base
}
return result
}(4,3)
print(result)

上面两个闭包函数,第一个是先声明再调用,第二个是声明后直接调用
注意目前Swft中闭包的外部形参名没有任何意义。

几种简化方法

省略形参列表、返回值类型
//使用闭包表达式,由于程序定义square变量的类型
//所以swift可以推断闭包表达式的形参列表、返回值类型

    var square:(Int)->Int ={(var) in return val*val}

//省略形参类型后,也可省略形参列表的圆括号,即可简化成

var square:(Int)->Int={var in return val*val}
print(square(5))//输出25
省略return

如果闭包表达式只有一行代码,并且这行代码的返回值将作为闭包表达式的返回值,那么可以省略

Object-C---Swift之(七)嵌套函数与闭包相关推荐

  1. python高阶函数闭包装饰器_Python自学从入门到就业之高阶函数、嵌套函数、闭包、装饰器...

    高阶函数 在Python中,函数其实也是一种数据类型. def test(): return 'hello world' print(type(test)) # 函数对应的数据类型是 function ...

  2. Python基础教程:嵌套函数、闭包

    嵌套函数 在函数中定义另一个函数称为嵌套函数. 嵌套函数可以访问包围范围内的变量. def print_msg(msg):def printer():print(msg)printer()print_ ...

  3. tr闭包_嵌套函数及闭包

    这篇文章其实是要讲闭包的一些初级应用,但是为了将闭包,我们还是从嵌套函数开始说吧,纵使所有的JavaScript函数都可以说是闭包,但是只有当一个嵌套函数被导出到它所定义的作用域之外时,这种闭包才是有 ...

  4. 浅谈Javascript -- 【嵌套函数及闭包】

    这篇文章其实是要讲闭包的一些初级应用,但是为了将闭包,我们还是从嵌套函数开始说吧,纵使所有的JavaScript函数都可以说是闭包,但是只有当一个嵌套函数被导出到它所定义的作用域之外时,这种闭包才是有 ...

  5. 【Rust深入浅出-7】函数与闭包

    [Rust深入浅出-7]函数与闭包 第一章Hello World! 第二章 变量和基本数据类型 第三章 运算符 第四章 类型转换 第五章 拓展数据类型 第六章 控制流 第七章 函数与闭包 文章目录 [ ...

  6. day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器

    一.函数即变量 1.赋值效果图 a = 1  b = a def func(): print('hello') func 是函数名,相当于变量名,print('hello')是函数体,相当于变量的值, ...

  7. Python基础学习(七)--函数进阶,全局局部,global,nonlocal,enclosing,命名空间,作用域,重要函数,lambda,闭包

    函数进阶 一.函数参数类型 可变类型参数与不可变类型参数 不可变类型参数:数字.字符串.元组 可变类型参数:列表.字典.集合 (1)不可变类型参数 fun(a)–内部修改a的值,只是修改了一个对象的副 ...

  8. 《Swift开发实战》——第2章,第2.4节函数和闭包

    本节书摘来自异步社区<Swift开发实战>一书中的第2章,第2.4节函数和闭包,作者 李宁,更多章节内容可以访问云栖社区"异步社区"公众号查看 2.4 函数和闭包 在本 ...

  9. Swift和Java在函数(method/方法)方面的比较

    1. 函数是用来完成特定任务的独立的代码块.Swift中函数的使用比Java中更灵活,在 Swift 中,可以把函数当做别的函数的参数,也可以从其他函数中返回函数.函数的定义可以写在在其他函数定义中, ...

最新文章

  1. Android 解析imei
  2. 大数据【企业级360°全方位用户画像】标签系统介绍
  3. Java实现基数排序及其推导过程 Radix Sort
  4. AsyncTask的用法
  5. [IoC容器Unity]第三回:依赖注入
  6. 使用自定义annotation接口进行aspectj动态缓存
  7. 35 SD配置-销售凭证设置-定义项目类别组
  8. 关于开发板不断eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 eth0: link down的问题
  9. vtkContourFilter等值面(线)
  10. 高山仰止,景行行止,虽不能至,心向往之!软工大二狗的回顾与展望。
  11. 雷顿学院与与河北各地高校签署战略合作伙伴关系
  12. python程序画吉他和弦
  13. 网络环路检测定位技术的发展过程
  14. 简单了解pgpool
  15. item_search - 根据关键词取虾皮(Shopee)商品列表
  16. 区分PMOS管和NMOS管的巧妙记忆方法
  17. 计算机如何删除用不到的打印机驱动程序,打印机驱动不能删除怎么办 打印机驱动无法删除的解决方法...
  18. Hive 练习(带数据)
  19. crash工具使用方法
  20. 【工业互联网】项天成:实体经济需要智能服务;王洪添:浪潮M81工业互联网平台

热门文章

  1. ajax阿贾克斯2019阵容,记住阿贾克斯2019的孩子们!他们杀死皇马尤文 这毕业季真痛...
  2. 显示倒计时的Dialog
  3. java 中符号_java中的符号
  4. Unixbench——2D图形性能测试方法及工具下载
  5. python使用pyinstaller打包后运行报错排查思路
  6. 环境光吸收(也叫环境光遮蔽,Ambient Occlusion)
  7. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java房屋租赁管理系统d97n3
  8. 中级软件工程师考试资料--2023年初版
  9. 这个900度近视画家笔下的“神秘女子”,会让你分不清照片和画作!
  10. 科学技术法c语言字符串,PAT Basic 1024. 科学计数法 (20)(C语言实现)