8 函数类型——《Swift3.0从入门到出家
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从入门到出家的更多相关文章
- 7 函数——《Swift3.0从入门到出家
6 函数 函数就是对某个功能的封装,一个swift程序可能由多个函数组成 swift中定义函数的格式: func 函数名称(参数列表) —>函数返回值类型{ 函数体 return } 函数定义要 ...
- 9 闭包——《Swift3.0从入门到出家》
8 闭包 Swift语言中可以使用一块独立代码块替代函数的定义,称独立的代码块为闭包 闭包格式为: {(参数列表)->返回值类型 in 执行语句 } 例子: <1>使用闭包实 ...
- 10 结构体和类 - —— 《Swift3.0 从入门到出家》
Swift中的面向对象5个要素:枚举.结构体.类.协议.扩展 面向对象研究的是对象,完成一件事情需要多个对象参与,是生活的映射 Swift中结构体和类非常相似,也就是结构体能完成类的所有功能.结构体是 ...
- 5 数组 Swift/Object-C ——《Swift3.0从入门到出家》
Swift中数组是一种数据结构,用来存放多个形同类型的数据结构,数据在数组内的存放是有序的,存进来的数据个读出来的顺序相同 Object-C 中数组能够存放任意类型的数据类型为[AnyObject] ...
- 6 字典和集合——《Swift3.0从入门到出家》
字典和集合 字典 字典是集合类型存放多个键值对,其中键是唯一的,不能重复 字典中存放的键值对是无序的,写入的顺序和读取的顺序可能不同 字典中存放的数据是任意类型 字典可以分为可变字典和不可变字典 创建 ...
- 4 字符串 Swift/Objective -C ——《Swift3.0从入门到出家》
4 字符串 Swift and Object-C 字符串由多个字符组成,使用 “” 引起的内容 swift语言中提供了两种字符串:可变字符串和不可变字符串 可变字符串:字符串的内容可以修改,字符串 ...
- 2 分支语句——《Swift3.0 从入门到出家》
2 分支语句 当程序面临多个选择,每一个选择都会执行不同的代码块,这个时候就要使用分支语句.常见的分支语句有: if 选择语句:if... if…else if…elseif…else if是现实生活 ...
- 3 循环语句——《Swift3.0从入门到出家》
3 循环语句 当一段代码被多次重复利用的使用我们就使用循环 swift提供了三种形式的循环语句 1.while 循环 2.repeat — while 循环 3.for — in 循环 while 循 ...
- Swift2.0语言教程之函数的返回值与函数类型
Swift2.0语言教程之函数的返回值与函数类型 Swift2.0中函数的返回值 根据是否具有返回值,函数可以分为无返回值函数和有返回值函数.以下将会对这两种函数类型进行讲解. Swift2.0中具有 ...
随机推荐
- 20145219 《Java程序设计》第16周课程总结
20145219 <Java程序设计>第16周课程总结 每周读书笔记(即学习总结)链接汇总 第0周问卷调查 第1周读书笔记 第2周读书笔记 第3周读书笔记 第4周读书笔记 第5周读书笔记 ...
- NOIP 统计单词个数
描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单词个 ...
- Linux系统下使用pwgen生成密码的使用教程
pwgen生成的密码易于记忆且相当安全.从技术上来说,容易记忆的密码不会比随机生成的密码更加安全.但是,在大多数情况下,pwgen生成的密码已经足够安全,除了网银密码等需要高安全等级的情况外.使用易于 ...
- Spring 模块
- Moore majority vote algorithm(摩尔投票算法)
Boyer-Moore majority vote algorithm(摩尔投票算法) 简介 Boyer-Moore majority vote algorithm(摩尔投票算法)是一种在线性时间O( ...
- Bellman-Ford算法优化
2017-07-27 16:02:48 writer:pprp 在BEllman-Ford算法中,其最外层的循环的迭代次数为n-1,如果不存在负权回路,需要迭代的次数是远远小于n-1; 如果在某一次迭 ...
- Spring与CXF整合
1.首先引入CXF相关jar包以及spring相关jar包,因项目是maven项目,所以直接在pom.xml文件中引入以下依赖即可(以下只是CXF的依赖包,Spring的也要引入,相关的依赖参考我博客 ...
- java 实现图片拼接
1.想要实现多个图片的纵向和横向拼接.实现代码如下 2.补充发现横向拼接的一个bug 宽度没有增加(已修复) 百度地址:工具jar下载 链接:https://pan.baidu.com/s/1uZCN ...
- Java_WebKit
1. http://tieba.baidu.com/p/2807579276 下载地址: http://qtjambi.org/downloads https://qt.gitorious.org/q ...
- Netty(RPC高性能之道)原理剖析
1,Netty简述 Netty 是一个基于 JAVA NIO 类库的异步通信框架,用于创建异步非阻塞.基于事件驱动.高性能.高可靠性和高可定制性的网络客户端和服务器端 RPC高性能分析,请参考文章“[ ...