李洪强iOS开发Swift篇—08_函数(2)
李洪强iOS开发Swift篇—08_函数(2)
一、函数类型
函数类型也是数据类型的一种,它由形参类型和返回值类型组成,格式是
(形参类型列表) -> 返回值类型
1 func sum(num1: Int, num2: Int) -> Int {
2 return num1 + num2
3 }
sum函数的函数类型是(Int, Int) -> Int
1 func printLine()
2 {
3 println("-----------")
4 }
printLine函数的函数类型有4种表示方法
(1)Void -> Void
(2)() -> ()
(3)Void -> ()
(4)() -> Void
二、利用函数类型定义变量
可以利用函数类型来定义变量,将来可以存储这种类型的函数
1 func sum(num1: Int, num2: Int) -> Int {
2 return num1 + num2
3 }
4 var fn: (Int, Int) -> Int = sum
5 fn(10, 20) // 返回30
由于Swift有类型推断机制,因此,也可以这么写
var fn = sum // fn以后所存储函数的类型就必须是(Int, Int) -> Int
三、函数作为参数
跟其他数据类型一样,函数也能当函数的参数
1 func printResult(fn: (Int, Int) -> Int, num1: Int, num2: Int)
2 {
3 println("运算结果是:%d", fn(num1, num2))
4 }
fn参数接收一个函数,这个函数必须返回Int、有2个Int类型的参数

1 func sum(num1: Int, num2: Int) -> Int {
2 return num1 + num2
3 }
4 func minus(num1: Int, num2: Int) -> Int {
5 return num1 - num2
6 }
7 printResult(sum, 20, 10) // 30
8 printResult(minus, 20, 10) // 10

四、函数作为返回值
跟其他数据类型一样,函数也能当函数的返回值

1 func goToWork() { println("去上班") }
2 func playFootball() { println("踢足球") }
3 func howToDo(day: Int) -> () -> () {
4 if day < 6 {
5 return goToWork
6 } else {
7 return playFootball
8 }
9 }
10 var fn = howToDo(7)
11 fn()
12 // 踢足球

五、函数重载
函数重载:函数名相同,函数类型不同
下面的2个函数构成重载
(1)函数名:sum,函数类型:(Int, Int) -> Int
1 func sum(num1: Int, num2: Int) -> Int {
2 return num1 + num2
3 }
(2)函数名:sum,函数类型:(Int, Int, Int) -> Int
1 func sum(num1: Int, num2: Int, num3: Int) -> Int {
2 return num1 + num2 + num3
3 }
六、嵌套函数
全局函数:在全局作用域中定义的函数
嵌套函数:在某个函数体中定义的函数
代码示例:

1 func howToDo(day: Int) -> () -> () {
2 func goToWork() { println("去上班") }
3 func playFootball() { println("踢足球") }
4 if day < 6 {
5 return goToWork
6 } else { return playFootball }
7 }
8 var fn = howToDo(5)
9 fn() // 去上班
10 goToWork()

注意:第10行是错误写法,嵌套函数的作用域仅限于定义嵌套函数的函数体内部
李洪强iOS开发Swift篇—08_函数(2)的更多相关文章
- 李洪强iOS开发Swift篇—07_函数
李洪强iOS开发Swift篇—07_函数 一.函数的定义 (1)函数的定义格式 1 func 函数名(形参列表) -> 返回值类型 { 2 // 函数体... 3 4 } (2)形参列表的格式 ...
- 李洪强iOS开发Swift篇---12_NSThread线程相关简单说明
李洪强iOS开发Swift篇---12_NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThre ...
- 李洪强iOS开发Swift篇---11_变量&常量&元组
李洪强iOS开发Swift篇---11_变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对 ...
- 李洪强iOS开发Swift篇—10_方法
李洪强iOS开发Swift篇—10_方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开 ...
- 李洪强iOS开发Swift篇—09_属性
李洪强iOS开发Swift篇—09_属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要 ...
- 李洪强iOS开发Swift篇—06_流程控制
李洪强iOS开发Swift篇—06_流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注 ...
- 李洪强iOS开发Swift篇—05_元组类型
李洪强iOS开发Swift篇—05_元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let po ...
- 李洪强iOS开发Swift篇—04_运算符
李洪强iOS开发Swift篇—04_运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运 ...
- 李洪强iOS开发Swift篇—03_字符串和数据类型
李洪强iOS开发Swift篇—03_字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容 let website = "http:// ...
随机推荐
- jquery处理textarea中的手动换行
textarea的手动换行会产生换行标志,但这个标志存在却看不到,存入数据库中后读出来显示在页面上却不会换行,如何处理呢? 网上众说纷纭,经过测试用 textarea的内容.replace(/\n/g ...
- primefaces 带参数的组件
分析了一下primefaces extension showcase的源码,总结一下组件传参的方式. 下面定义了一个组件,名为fourTabsDecoratorCustom.xhtml 1: < ...
- Oracle 数据库(oracle Database)Select 多表关联查询方式
Oracle数据库中Select语句语法及介绍 SELECT [ ALL | DISTINCT ] <字段表达式1[,<字段表达式2[,…] FROM <表名1>,<表名 ...
- WinEdit7 破解方法
最近遇到了winEdit7 超过试用期的问题,找了下解决方案. 这个靠谱,通过在每次退出时自动删除注册表信息,达到无限试用的目的: https://lttt.blog.ustc.edu.cn/2012 ...
- http 请求头
HTTP Request的Header信息 1.HTTP请求方式 如下表: GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并 ...
- (hdu)5391 Zball in Tina Town
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=5391 Problem Description Tina Town is a friendl ...
- 给python类动态添加方法(method)
群里有人问如何做到 def foo(): pass class Bar(object): pass Bar.set_instance_method(foo) b = Bar() b.foo() 这个其 ...
- atc游戏bot
游戏玩起来太虐心了,就写了个bot来玩, 代码在此: git clone https://github.com/chenfengyuan/atc-bot-new.gitgit clone https: ...
- Linux运维工程师面试
一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? ...
- bootstrap Tooltip换行问题
bootstrap自身带有tooltip,使用起来很方便,但是美中不足,它的tooltip并不支持换行. 比如我们通过<textarea>输入框传入到数据库的长文本,文本是带有换行符的,但 ...