9.5 函数重载

函数重载是指多个函数享有相同的名字但是函数类型必须不同的一组函数,它们互相构成重载关系。

提示 Swift的函数类型包括了参数列表类型和返回值类型,例如(Double, Double) -> Double参数类型是由两个Double类型参数列表和Double类型返回值构成的。也就是说,在Swift中函数名相同、参数列表不同或返回值类型不同的函数都可以构成重载。而在C++和Java等语言中,函数重载只与参数列表不同有关,与函数返回值无关。

下面我们来看一个示例:

  1. func receive(i : Int) {
  2. println("接收一个Int类型数据 i=\(i)")
  3. }
  4. func receive(d :Double) {
  5. println("接收一个Double类型数据 d=\(d)")
  6. }
  7. func receive(x :Int, y :Int) {
  8. println("接收两个Int类型数据 x=\(x) y=\(y)")
  9. }
  10. func receive(i :Int) ->Int {
  11. println("接收一个Int类型数据 i=\(i), 返回值类型是Int")
  12. return i*i
  13. }
  14. let a1:Int = receive(10)
  15. let a2:() = receive(10)
  16. let a3:Void = receive(10
  17. let a4:() = receive(10.0)
  18. let a5:() = receive(10, 10)

运行输出结果如下:

  1. 接收一个Int类型数据 i=10, 返回值类型是Int
  2. 接收一个Int类型数据 i=10
  3. 接收一个Int类型数据 i=10
  4. 接收一个Doubel类型数据 d=10.0
  5. 接收两个Int类型数据 x=10 y=10

上述代码的第①行~第④行定义了一组重载函数receive。需要注意的是,代码第①行和第④行声明的函数receive,它们的参数列表相同,但是返回值类型不同。

函数调用关系如图9-2所示,第⑤行代码let a1:Int = receive(10)调用的是第④行的函数receive,我们需要明确声明变量或常量类型为Int。第⑥行和第⑦行调用声明常量类型分别是()Void,它们都表示没有返回值。其他函数调用关系不再赘述。

{%}

图 9-2 调用重载函数