函数
- 定义
// 有返回值
func pi() -> Double {
return 3.14
}
// 无返回值
func a() -> () {
}
func a() -> void {
}
func a() {
}
// Void就是空元祖
- 调用
//型参只能是let
func sum(v1: Int , v2: Int) -> Int {
return v1+v2
}
// 需要声明形参
sum(v1: 10, v2: 20)
/// 求和【概述】
///
/// 将2个整数相加【更详细的描述】
/// - Parameter v1:xxx
/// - Parameter v2:xxx
/// - Returns: xxx
/// - Note:xxxx【批注】
-
参数标签
可以修改参数标签func goToWork(at time:String) { xxx } goToWork(at: “8:00”)
可以使用下划线_ 省略参数标签
func sum(_ v1: Int, _ v2: Int) -> Int { v1 + v2 }
默认参数值
func check(name: String = “You”, age:Int, job:String = “none”) { xx } check(name:”I”,job”teacher”) //使用省略标签要避免出错
-
可变参数
func sum(_ numbers: Int...) -> Int { for number In numbers { } } // 一个函数最多只能有一个可变参数 // 紧跟在可变参数后面的参数不能省略参数标签
-
输入输出参数
var number = 10 func add(_ num: input Int) { num = 20 } add(&number) // 可变参数不能使用inout // inout 不能有默认值 // 本质是地址传递 // 只能传入可以被多次赋值的多(字面量、let的都不行) // ps:官方内部有swap交换两个值的函数方法 // 也可以使用元祖进行交换
-
函数重载
规则:
1、函数名相同
2、参数个数不同||参数类型不同||参数标签不同
3、与返回值类型无关
4、默认参数值和函数重载一起使用产生二义性时,编译器并不会报错(在c++会报错)
5、可变参数、省略参数标签、函数重载在一起使用产生二义性时,编译器有可能报错 -
内联函数
如果开启优化模式(Build Settings - Swift compiler - Release)会将某些函数转成内联函数(函数过长、有递归调用、动态派发的函数就不会转变成内联)
将函数调用展开函数体
// 永远不会被内联(即使开启了编译器优化)
@inline(never) func test () {
xxx
}
// 开启编译器优化后,即使代码很长也会被内联(递归调用函数,动态派发除外)
@inline(/__always) func test () {
xxx
}
-
函数类型
说明:每个函数都是有类型的,函数类型由型参类型、返回值类型组成。
作用:定义变量(调用时不需要参数标签);作为函数参数;作为函数返回值(高阶函数)func hello(to somebody: String) -> String { return “Hello” + somebody } func bePolite(_ mathfn: (String) - > String, _ name: String) { print (“say: (mathfn(name))”); }
-
typealias
用来给类型(元祖、函数等等)起别名 -
嵌套函数
将函数定义在函数内部
网友评论