《Swift 权威指南》——第6章,第6.9节函数类型
本节书摘来自异步社区《Swift 权威指南》一书中的第6章,第6.9节函数类型,作者 李宁,更多章节内容可以访问云栖社区“异步社区”公众号查看
6.9 函数类型
Swift语言支持定义函数类型(类似于C语言的函数指针)。一个函数类型需要指定下面3个要素。
函数参数个数。
函数参数类型。
函数返回值。
函数类型和其他数据类型的使用方法完全相同,在冒号(:)后面指定类型。定义函数类型时除了不需要指定参数名和函数体外,和函数定义完全相同。
下面的代码定义了两个函数类型变量(fun1和fun2)。
var fun1: (inout String, Int) -> String var fun2: (String, String...) -> String
我们直接将符合要求的函数赋给对应的函数变量,例如,下面两个函数分别符合fun1和fun2的要求,所以可以直接初始化这两个变量。
func myFun1(inout name:String, age:Int) -> String { return "name:" + name + " age:" + String(age) } func myFun2(var header:String, strArray:String...) -> String { for s in strArray { header += " " + s } return header } // 初始化fun1 fun1 = myFun1 // 初始化fun2 fun2 = myFun2
在调用时可以直接使用函数类型变量。例如,调用fun1和fun2的代码如下。
var name:String = "bill" println(fun1(&name, 50)) println(fun2("Mike", "a","b"))
函数类型也可以作为函数的参数类型,这样就可以将外部函数传入另一个函数或方法,然后在方法中调用该外部函数了。这样可以很容易实现函数的多态。
// fun是函数类型参数 func myFun3(fun:(inout String, Int) -> String, str:String) { var name = "" println(fun(&name, 40)) } // 调用myFun3函数,fun1在前面的代码中已经定义了 myFun3(fun1, "hello")
当然,函数的返回值类型也可以是函数类型的,也就是说,函数可以返回另外一个函数。
func method1(n:Int) -> Int { return n*n } func method2(n:Int) -> Int { return 2*n } // myFun4的返回值是函数类型((Int) -> Int) func myFun4(flag:Bool) -> (Int) -> Int { // 根据参数值返回method1或method2 return flag ? method1:method2 } println(myFun4(true)(20)) println(myFun4(false)(20)) 执行这段代码会输出如下的内容。 400 40

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
《iOS 6核心开发手册(第4版)》——2.7节外观代理
本节书摘来自异步社区《iOS 6核心开发手册(第4版)》一书中的第2章,第2.7节外观代理,作者 【美】Erica Sadun,更多章节内容可以访问云栖社区“异步社区”公众号查看 2.7 外观代理iOS 6核心开发手册(第4版)手工对应用程序中的每个按钮、导航栏或滑块进行着色会感到疲倦吗?不要浪费时间进行子类化。代理允许自定义视图类的所有成员(尤其是控件)的默认外观。无须更新实例的属性,而可以对代理应用相同的更新。这些调用将会设置滑块实例的共享外观: [[UISlider appearance] setMinimumTrackTintColor:[UIColor blackColor]]; [[UISlider appearance] setMaximumTrackTintColor:[UIColor grayColor]]; 有时,你可能只想逐个容器地应用外观代理。例如,你可能希望以蓝色显示所有的导航栏按钮,但不影响工具栏中的按钮。在这种情况下,就可以使用外观代理。 [[UIBarButtonItem appearanceWhenContainedIn: [UINavigationB...
- 下一篇
《Android 开发入门与实战(第二版)》——6.1节什么是Activity
本节书摘来自异步社区《Android 开发入门与实战(第二版)》一书中的第6章,第6.1节什么是Activity,作者eoe移动开发者社区 组编 , 姚尚朗 , 靳岩,更多章节内容可以访问云栖社区“异步社区”公众号查看 6.1 什么是ActivityAndroid 开发入门与实战(第二版)Activity是Android四大组件之一,也是Android中最基本的模块之一。在官网中是这样介绍Activity的。 几乎所有的的Activity都是用来与用户交互的,因此Activity主要关注于视图窗体的创建(你可以通过setContentView(View)方法来放置你的UI),而且Activity对于用户来说通常都表现为全屏的窗体,当然,它们也能以其他的方式呈现,比如浮动窗体。 通俗一点来讲,我们可以把手机比作一个浏览器,那么Activity就相当于一个网页。在Activity中,我们可以添加不同的View,并且可以对这些View做一些事件处理。例如,在Activity中添加button、checkbox等元素。因此,Activity的概念在某种程度上和网页的概念是相当类似的。网页对于一...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启