9.3 函数返回值

Swift中函数的返回值也是比较灵活的,形式主要有3种:无返回值、单一返回值和多返回值。这一节我们介绍这3种函数返回值的不同形式。

9.3.1 无返回值函数

有的函数只是为了处理某个过程,或者要返回的数据要通过inout类型参数传递出来,这时可以将函数设置为无返回值。所谓无返回结果,事实上是Void类型,即表示没有数据的类型。

无返回值函数的语法格式有如下3种形式:

  1. func 函数名(参数列表) {
  2. 语句组
  3. }
  4. func 函数名(参数列表) ->() {
  5. 语句组
  6. }
  7. func 函数名(参数列表) ->Void {
  8. 语句组
  9. }

无返回值函数不需要“return返回值”语句,第①行语法格式很彻底,参数列表后面没有箭头和类型,第②行语法格式->(),表示返回类型是空的元组。第③行语法格式->Void,表示返回类型是Void类型。

第①行的格式函数定义我们在上一节的increment函数中使用过。increment函数修改为②和③格式的语法如下:

  1. func increment(inout value:Double, amount:Double = 1.0) {
  2. value += amount
  3. }
  4. func increment(inout value:Double, amount:Double = 1.0) ->() {
  5. value += amount
  6. }
  7. func increment(inout value:Double, amount:Double = 1.0) ->Void {
  8. value += amount
  9. }

9.3.2 多返回值函数

有时我们需要函数返回多个值,这可以通过两种方式来实现。一种是在函数定义的时候,将函数的多个参数声明为引用类型传递,这样当函数调用结束时,这些参数的值就变化了。另一种是将返回定义为元组类型。

本节将介绍通过元组类型返回多值的实现。下面看一个示例:

  1. func position(dt: Double, speed:(x:Int, y:Int)) -> (x:Int, y:Int) {
  2. var posx:Int = speed.x Int(dt)
  3. var posy:Int = speed.y Int(dt)
  4. return (posx, posy)
  5. }
  6. let move = position(60.0, (10, -5))
  7. println("物体位移:\(move.x) , \(move.y)")

这个示例是计算物体在指定时间和速度情况下的位移。第①行代码是定义position函数,其中dt: Double参数是时间,参数speed:(x:Int, y:Int)是元组类型,xy表示分别表示在x轴和y轴上的速度,速度是矢量,是有方向的,负值表示沿x轴或y轴相反的方向运行。position函数的返回值是(x:Int, y:Int)的元组类型。

函数体中的第②行代码var posx:Int = speed.x * Int(dt)计算x方向的位移,第③行代码var posy:Int = speed.y * Int(dt)计算y方向的位移。最后第④行代码return (posx, posy)将计算后的数据返回。

第⑤行代码调用函数,传递的时间是60.0秒,速度是(10, -5)。第⑥行代码打印输出结果,结果如下:

  1. 物体位移:600 , -300