6.函数和闭包

2020-05-06  本文已影响0人  迷心迷

函数的定义

基本概念
定义和调用函数
无形式参数的函数
多形式参数的函数
无返回值的函数
多返回值的函数
可选元组返回类型
隐式返回的函数
函数实际参数标签和形式参数名
指定实际参数标签
省略实际参数标签
默认形式参数值
可变形式参数
输入输出形式参数
13

函数类型和内嵌函数

函数类型

使用函数类型

函数类型作为形式参数类型
函数类型作为返回类型
内嵌函数
函数重载
func sum(v1:Int, v2: Int) -> Int {
    v1 + v2
}

//参数个数不同
func sum(v1:Int, v2: Int, v3: Int) -> Int {
    v1 + v2 + v3
}

//参数类型不同
func sum(v1:Int, v2: Double) -> Double {
    Double(v1) + v2
}

//参数类型不同
func sum(v1:Double, v2: Int) -> Double {
    v1 + Double(v2)
}

//参数标签不同
func sum(_ v1:Int, _ v2: Int) -> Int {
    v1 + v2
}

//参数标签不同
func sum(a:Int, b: Int) -> Int {
    a + b
}

注意点:
默认参数值和函数重载一起使用产生二义性时,编译器并不会报错
可变参数、省略参数标签、函数重载一起使用产生二义性时,编译器有可能会报错。

内联函数

如果开启了编译器优化(Release模式默认会开启优化),编译器会自动将某些函数变成内联函数,将函数调用展开成函数体

Build Settings -> 搜索optimization -> 在Optimization Level下面修改

//永远不会被内联(即使开启了编译器优化)
@inline(never) func test() {
    print("test")
}

//开启编译器优化后,即使代码很长,也会被内联(递归调用函数,动态派发的函数除外)
@inline(__always) func test2() {
    print("test")
}

闭包

闭包的概念

  1. 全局函数是一个有名字但不会捕获任何值的闭包;
  2. 内嵌函数是一个有名字且能从其上层函数捕获值的闭包;
  3. 闭包表达式是一个轻量级语法所写的可以捕获其上下文中常量或变量值的没有名字的闭包。
闭包表达式
闭包表达式语法
闭包表达式语法版本的 backward

从语境中推断类型

从单表达式闭包隐式返回

简写实际参数名

运算符函数

尾随闭包

捕获值

闭包是引用类型

逃逸闭包和自动闭包
逃逸闭包
32

自动闭包

自动+逃逸

高阶函数

map
filter
39
reduce
flatMap
41
compactMap

函数式编程1

范式转换-从一个题目说起
范式转换-传统解决方案
43
范式转换-函数式
44
范式转换

简洁

函数式编程2

业务需求

命令式解法
函数式解法

聊聊 Swift 的劣势-并行

47
对 Swift 的尝试改进
48 49
具有普遍意义的基本构造单元
上一篇 下一篇

猜你喜欢

热点阅读