目录
Swift底层原理探索----函数
函数的定义
//无参函数
func pi() -> Double {
return 3.14
}
//带参函数
func sum(v1: Int, v2: Int) -> Int {
// 形参默认是let, 并且只能是let,所以不用纠结let or var
return v1 + v2
}
//函数的调用
sum(v1: 10, v2: 20)
//无返回值 下面三种等价
func sayHello() -> Void {
print("Hello")
}
func sayHello2() -> () {
print("Hello")
}
func sayHello3() {
print("Hello")
}
隐式返回
如果整个函数体是一个单一表达式,那么函数会隐式(自动)返回这个表达式
//隐式返回
func sum2(v1: Int, v2: Int) -> Int {
// 函数体内只有一条语句,便可以不用写return, 如果有多条语句,则必须通过 return关键字来返回
v1 + v2
}
//函数的调用
sum2(v1: 10, v2: 20)
返回元组:实现多返回值
//通过元祖实现多返回值,将多个返回值整理到一个元祖数据结构中进行一块返回
func calculate(v1: Int, v2: Int) -> (sum: Int, difference: Int, average: Int) {
let sum = v1 + v2
return (sum, v1 - v2, sum >> 1)
}
let result = calculate(v1: 20, v2: 10)
result.sum
result.difference
result.average
函数文档的注释
/// 求和【概述】
///
/// 将2个整数相加【更详细的描述】
///
/// - Parameter v1: 第一个整数
/// - Parameter v2: 第二个整数
/// - Returns: 2个整数的和
///
/// - Note: 传入两个整数即可【批注】
func sum(_ v1: Int, _ v2: Int) -> Int {
v1 + v2
}
函数文档的注释需要严格按照上面的模版来填写。苹果官方非常建议我们对函数进行详细的文档注视,有助于提高代码的可读性。注释生成的效果如下,通过option键
+点击函数名称
调出。
更详细的关于函数文档注释请参考苹果官方提供的接口设计规范
参数标签
//函数定义里面,通过形参time的语义,很容易理解传进来参数的性质或者作用
func goToWork(at time: String) {
print("This time is \(time)")
}
//函数调用的时候,实际参数取代了time,
goToWork(at: "10:00")
上例中的goToWork
函数,参数拥有两个标签at
和time
,其中time
作为为形参,在函数体内部实现中被用来传递参数,而at
则是在函数调用的时候使用。
上面的示例可感觉到,通过参数标签,使得函数的定义和调用,都非常符合口语习惯,利用苹果的提供的这个特性,参照我们正常的语言习惯来合理地设置参数标签,可以很好地提升代码的可读性。这也符合了苹果的API设计准则。
func sum(_ v1: Int, _ v2: Int) -> Int {
v1 + v2
}
sum(10, 20)
通过_
来省略参数标签,可以是的函数的调用无需参数数名,是的代码很精简。但是对于这个一点的使用需要结合实际情况,不要为了精简代码而影响到代码的可读性,从而给后期的维护带来不便。