Swift语言中每一个函数都有它特定的数据类型,称其为函数类型

函数类型和基本数据类型一样,可以定义变量或者常量,可以定义函数形参,也可以做为函数的返回值类型

函数类型的格式为:参数列表的数据类型—>返回值类型

<1>func test1(name: String,age: Int)->String{}

函数类型:(String,Int)->String

<2>func test2(a: Int){}

函数类型:(Int)->() 或者 (Int)->Void

<3>func test3(){}

函数类型:()->() 或者 ()->Void

定义函数类型的变量

func sumAAndB(a: Int,b: Int) -> Int {//函数类型为(Int,Int)->Int

return a + b

}

var myFunction: (Int,Int)->Int = sumAAndB//myFunction 的类型标注为函数类型

func shapePan(width: Int,height: Int) ->Int {

return (height + width) * 2

}

myFunction = shapePan //可以将函数赋给相同函数类型的变量

使用函数类型定义函数形参

例子:实现数组中的数据排序:

var array = [1,1231,124,54654,10]

//数组升序函数

func isBigerSort(oneNum: Int,twoNum: Int)->Bool {

return oneNum > twoNum

}

//数组降序函数

func isSmallerSort(oneNum: Int,twoNum: Int) ->Bool {

return oneNum < twoNum

}

//两个数交换数组中的显示位置的函数

func exchangeNumIndex(inout one: Int,inout two: Int) -> Void {

let tmp = one

one = two

two = tmp

}

//排序函数,其中method为函数类型的参数

func sortArray(inout arr: [Int],method: (Int,Int)->Bool) {

for i in 0..<arr.count - 1 {

for j in 0..<arr.count - i - 1 {

if method(arr[j],arr[j + 1]) {

exchangeNumIndex(&arr[j], two: &arr[j + 1])

}

}

}

}

//实现升序

sortArray(&array, method: isBigerSort)//传入数组地址和相同函数类型的函数

print(array)

//实现降序

sortArray(&array, method: isSmallerSort)

print(array)

函数类型作为函数的返回值类型

func triangle(length: Int) ->Int {

return 3 * length

}

func square(length: Int) ->Int {

return 4 * length

}

func circle(r: Int) ->Int {

return Int(3.14) * r * r

}

func getShapeMeter(type: String) ->(Int)->Int {

switch type {

case "triangle":

return triangle

case "square":

return square

default:

return circle

}

}

var myFunc = getShapeMeter("triangle")

print(myFunc(10))

函数类型作为函数形参,通过判断形参对应的方法能使一个函数实现不同的功能

8 函数类型——《Swift3.0从入门到出家的更多相关文章

  1. 7 函数——《Swift3.0从入门到出家

    6 函数 函数就是对某个功能的封装,一个swift程序可能由多个函数组成 swift中定义函数的格式: func 函数名称(参数列表) —>函数返回值类型{ 函数体 return } 函数定义要 ...

  2. 9 闭包——《Swift3.0从入门到出家》

    8  闭包 Swift语言中可以使用一块独立代码块替代函数的定义,称独立的代码块为闭包 闭包格式为: {(参数列表)->返回值类型    in 执行语句 } 例子: <1>使用闭包实 ...

  3. 10 结构体和类 - —— 《Swift3.0 从入门到出家》

    Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...

  4. 5 数组 Swift/Object-C ——《Swift3.0从入门到出家》

    Swift中数组是一种数据结构,用来存放多个形同类型的数据结构,数据在数组内的存放是有序的,存进来的数据个读出来的顺序相同 Object-C 中数组能够存放任意类型的数据类型为[AnyObject] ...

  5. 6 字典和集合——《Swift3.0从入门到出家》

    字典和集合 字典 字典是集合类型存放多个键值对,其中键是唯一的,不能重复 字典中存放的键值对是无序的,写入的顺序和读取的顺序可能不同 字典中存放的数据是任意类型 字典可以分为可变字典和不可变字典 创建 ...

  6. 4 字符串 Swift/Objective -C ——《Swift3.0从入门到出家》

    4 字符串   Swift and Object-C 字符串由多个字符组成,使用 “” 引起的内容 swift语言中提供了两种字符串:可变字符串和不可变字符串 可变字符串:字符串的内容可以修改,字符串 ...

  7. 2 分支语句——《Swift3.0 从入门到出家》

    2 分支语句 当程序面临多个选择,每一个选择都会执行不同的代码块,这个时候就要使用分支语句.常见的分支语句有: if 选择语句:if... if…else if…elseif…else if是现实生活 ...

  8. 3 循环语句——《Swift3.0从入门到出家》

    3 循环语句 当一段代码被多次重复利用的使用我们就使用循环 swift提供了三种形式的循环语句 1.while 循环 2.repeat — while 循环 3.for — in 循环 while 循 ...

  9. Swift2.0语言教程之函数的返回值与函数类型

    Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...

随机推荐

  1. SpringBoot和Mycat动态数据源项目整合

    SpringBoot项目整合动态数据源(读写分离) 1.配置多个数据源,根据业务需求访问不同的数据,指定对应的策略:增加,删除,修改操作访问对应数据,查询访问对应数据,不同数据库做好的数据一致性的处理 ...

  2. 2.scala控制结构、函数、异常处理

    2.scala控制结构.函数.异常处理---小书匠,在线编辑器,MARKDOWN,Evernote,文件版本 a:focus { outline: thin dotted #333; outline: ...

  3. hibernate——第一次简单的使用

    提前有jdk.mysql.hibernate必须jar包.mysql连接jar包 mysql中的表 Java中的bean,User类 package com.xiaostudy.demo; publi ...

  4. JSP数据交互(一)

    1.JSP内置对象 请求对象:request 输出对象:out 响应对象:response 应用程序对象:application 会话对象:session 页面上下文对象:pageContext 页面 ...

  5. Pandas重建索引

    重新索引会更改DataFrame的行标签和列标签.重新索引意味着符合数据以匹配特定轴上的一组给定的标签. 可以通过索引来实现多个操作 - 重新排序现有数据以匹配一组新的标签. 在没有标签数据的标签位置 ...

  6. 全方位解读Java反射(reflection)

    JAVA提供了一种反射机制,反射也称为反省. java程序运行以后内存中就是一堆对象,除了对象什么都没有. 找对象 拉关系 瞎折腾 对象在运行过程中能否有一种机制查看自身的状态,属性和行为.这就是反射 ...

  7. Ajax-06 Ajax数据交换格式

    1.数据交换格式 服务端返回的数据,在本质上都是字符串,只是原生Ajax 或jQuery Ajax将这些字符串转换为容易理解的各种常用格式. a. Text 文本字符串 b.  XML JavaScr ...

  8. .SourceInsight添加.S文件

    在Option->Document Option添加配置.S然后再去添加文件

  9. HDU 1410 PK武林盟主

    Problem Description 枫之羽认为自己很强,想当武林盟主,于是找现任武林盟主氢氧化铜挑战.氢氧化铜欣然接受了挑战,两人约好于下个月的月圆之夜在HDU校园内的三根柱子上进行决战.这场PK ...

  10. Elasticsearch 文档专用

    ES安装等操作 http://blog.csdn.net/cnweike/article/details/33736429 https://www.elastic.co/guide/cn/elasti ...