1、函数的定义
/// 方法名 test
/// - Parameter num: 形参,默认为 let,只能是 let
/// Void为返回值,当为 Void 时可以省略
func test(num : Int) -> Void {
}
func test(num : Int) -> () {
}
func test(num : Int) {
}
test(num: 0)
//有参数有返回值
func sum(_ num1: Int, _ num2: Int) -> Int {
return num1 + num2
}
sum(0, 1)
//隐式返回 整个函数体只有单一表达式,函数体会返回这个表达式,省略掉 return
func sum(_ num1: Int, _ num2: Int) -> Int {
num1 + num2
}
2、利用元组实现多返回值
//通过元组实现多个返回值
func calculate(v1: Int, v2: Int) -> (sum: Int, diffrents : Int,average: Int){
let sum = v1 + v2
return (sum, v1 - v2, sum >> 1)
}
let cal = calculate(v1: 10, v2: 5)
cal.sum
cal.diffrents
3、函数的文档注释
4、参数标签
//修改参数标签
func sum(with num1: Int, and num2 : Int) -> Int {
num1 + num2
}
sum(with: 10, and: 11)
//省略参数标签
func sum(_ num1: Int, _ num2 : Int) -> Int {
num1 + num2
}
5、设置默认参数
//设置默认参数值
func sum(num1: Int = 10, str1 : String, num2 : Int) {
}
sum(num1: 1, str1: "", num2: 2)
sum(str1: "1", num2: 2)
6、可变参数
//输入输出参数 inout,可以在函数内部修改外部实参的值
func swapValues(num1: inout Int, num2 : inout Int) {
let value = num1
num1 = num2
num2 = value
}
var num1 = 10
var num2 = 20
swapValues(num1: &num1, num2: &num2)
7、函数重载
函数名相同,参数个数不同 | 参数类型不同 | 参数标签不同
注:函数返回类型与函数重载无关
func sum(v1: Int, v2: Int) -> Int {
v1 + v2
}
//参数个数不同
func sum(v1: Int, v2: Int, v3: Int) -> Int {
v1 + v2 + v3
}
//参数类型不同
func sum(v1: Double, v2: Int) -> Int {
Int(v1) + v2
}
//参数标签不同
func sum(a num1: Int,b num2: Int) -> Int {
num1 + num2
}
8、内联函数
将函数调用展开成函数体
如果开启了编译器优化,编译器会自动将某些函数变成内联函数
@inline func test(){
}
//永远不会被内联,即使开启编译器优化
@inline(never) func test(){
}
//开启编译器优化之后,即使代码很长也会被内联(地轨/动态派发函数除外)
@inline(__always) func test(){
}
9、函数类型
每一个函数都是有类型的,函数类型由形参类型和返回值类型确定。
函数类型可以作为函数的参数和函数的返回值
函数类型作为函数返回值的函数称作高阶函数
可以使用 typealias给类型起别名
//swift 中定义 Void 为空元组
public typealias Void = ()
函数嵌套:将函数定义在函数的内部