李洪强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)的更多相关文章

  1. 李洪强iOS开发Swift篇—07_函数

    李洪强iOS开发Swift篇—07_函数 一.函数的定义 (1)函数的定义格式 1 func 函数名(形参列表) -> 返回值类型 { 2 // 函数体... 3 4 } (2)形参列表的格式 ...

  2. 李洪强iOS开发Swift篇---12_NSThread线程相关简单说明

    李洪强iOS开发Swift篇---12_NSThread线程相关简单说明 一 说明 1)关于多线程部分的理论知识和OC实现,在之前的博文中已经写明,所以这里不再说明. 2)该文仅仅简单讲解NSThre ...

  3. 李洪强iOS开发Swift篇---11_变量&常量&元组

    李洪强iOS开发Swift篇---11_变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对 ...

  4. 李洪强iOS开发Swift篇—10_方法

    李洪强iOS开发Swift篇—10_方法 一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开 ...

  5. 李洪强iOS开发Swift篇—09_属性

    李洪强iOS开发Swift篇—09_属性 一.类的定义 Swift与Objective-C定义类的区别 Objective-C:一般需要2个文件,1个.h声明文件和1个.m实现文件 Swift:只需要 ...

  6. 李洪强iOS开发Swift篇—06_流程控制

    李洪强iOS开发Swift篇—06_流程控制 一.swift中的流程控制 Swift支持的流程结构如下: 循环结构:for.for-in.while.do-while 选择结构:if.switch 注 ...

  7. 李洪强iOS开发Swift篇—05_元组类型

    李洪强iOS开发Swift篇—05_元组类型 一.元组类型介绍 1.什么是元组类型 元组类型由 N个 任意类型的数据组成(N >= 0),组成元组类型的数据可以称为“元素” 示例: let po ...

  8. 李洪强iOS开发Swift篇—04_运算符

    李洪强iOS开发Swift篇—04_运算符 一.运算符 1.Swift所支持的部分运算符有以下一些 赋值运算符:= 复合赋值运算符:+=.-= 算术运算符:+.-.*./ 求余运算符:% 自增.自减运 ...

  9. 李洪强iOS开发Swift篇—03_字符串和数据类型

    李洪强iOS开发Swift篇—03_字符串和数据类型 一.字符串 字符串是String类型的数据,用双引号""包住文字内容  let website = "http:// ...

随机推荐

  1. 创建本地RPM源之更新系统旧版软件mysql

    事情起因 系统版本为Centos6.6 ,因为之前同事没有采用最小化选择性安装,所以系统安装好后自带有mysql5.1的三个安装包: [root@test ~]# rpm -qa | grep mys ...

  2. js_BOM_05

    1.下拉级联   |-select的API      |-如何获得选中的option?      |-如何创建option?      |-如何将option添加到select?      |-如何移 ...

  3. sea.js 学习

    开篇:终于学习了sea.js的使用了,因为它是一个模块加载工具,所以首先要了解javascript的模块编程,然后对sea.js的了解和使用 javascript 模块编程 为什么要模块化编程,为了让 ...

  4. Android版本分布——2016年10月更新

    Code Name Version API Level Distribution frogy(冻酸奶) 2.2.x 8 0.1% gingerbread(姜饼) 2.3.3——2.3.7 10 2.0 ...

  5. 解决 cocoapods diff: /../Podfile.lock: No such file or directory 问题

    解决cocoapods diff: /../Podfile.lock: No such file or directory google一圈之后,找到两个解决方案: 方案一:
 关闭Xcode,重新执 ...

  6. Xcode6.1模拟器ios8.1模拟器不能弹出虚拟键盘及虚拟键盘无法切换中文输入的解决办法

    1.不能弹出虚拟键盘的解决办法 模拟器菜单Hardware->Keyboard->Connect Hardware Keyboard取消选中,快捷键commad+shift+K 2.虚拟键 ...

  7. 菜鸟笔记之java中方法使用

    N!!!java中无参无返回值方法的使用 1,定义方法 eg: public void show(){ System.out.println("HelloWorld!") } -- ...

  8. 02_Jquery_04_属性选择器

    [简述] [index.jsp] <%@ page language="java" import="java.util.*" pageEncoding=& ...

  9. 什么是CGI(Common Gateway Interface)?

    参考: 1.Python CGI编程 2.十分钟搞懂CGI 3.CGI Made Really Easy

  10. ubuntu svn安装测试

    本机环境 :ubuntu 12.4 LTS desktop 1 sudo apt-get install  subversion  #安装svn 2  sudo mkdir   /home/lzj/s ...