开发者社区> 异步社区> 正文

《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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
深入浅出Swift(3)—— 函数
深入浅出Swift(3)—— 函数
16 0
【Swift 5.1】流程控制、函数与内联函数优化
文章目录 1.流程控制 1.1 while循环 eg1. 简单的打印例子1
68 0
Swift实用小册06:函数的定义、参数、返回、调用
Swift实用小册06:函数的定义、参数、返回、调用
118 0
Swift的输出函数
Swift的输出函数
63 0
swift语言之函数的基本构架
swift语言之函数的基本构架
42 0
Swift讲解专题七——函数
Swift讲解专题七——函数
59 0
Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract)
Swift中关于集合计算的几种函数记录(intersect、symmetricDifference、union、subtract) 很久之前用过一次,后来就忘了。。。扎心,现在记录一下 PS:这几种函数其实不限于swift内的,在JavaScript、python、DB等其他语言,应该也有类似用法,这里我只简单讲了在swift内的用法。
1594 0
swift4.1 系统学习十 函数
swift的函数与其他语言中的函数还是有很多的不同点的, 我们在本节中一起学习swift中的函数都有哪些特性。 辅助文件, 在“统一的函数引用体系”中会用到。
949 0
13.Swift学习之函数
函数的介绍 函数相当于OC中的方法 函数的格式如下 func 函数名(参数列表) -> 返回值类型 { 代码块 return 返回值 } func是关键字,多个参数列表之间可以用逗号,分隔,也可以没有参数 使用箭头->指向返回...
661 0
Swift中的函数常见写法
这里不涉及函数作为参数和返回值的情况。 进军iOS开发了哈。 计划六一前,搞一个套H5的App出来, 靠谱么? 其实,看过了java,php,javascript,python,go之后, 再在看swift,感觉很亲切啊, 都是老熟人。
1063 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
文章
问答
文章排行榜
最热
最新
相关课程
更多
相关电子书
更多
OpenStack Swift 海量小文件性能优化之路
立即下载
From Java_Android to Swift iOS
立即下载
Swift在Airbnb的应用实践
立即下载