Swift 函数重载

Swift 函数重载

当两个或更多函数具有相同的名称但不同的参数时,它们被称为重载函数,这个过程被称为函数重载。

函数重载的需求

让我们假设一个情况。您需要开发一个射击游戏,玩家可以使用刀、手榴弹和枪攻击敌人。让我们看看您对攻击功能的解决方案可能如何定义这些动作为函数:

示例

func attack() {
    //..
    print("Attacking with Knife")
}
func attack() {
    //..
    print("Attacking with Blade")
}
func attack() {
    //..
    print("Attacking with Gun")
}

你可以看到上面的程序对编译器来说是混乱的,当你在Swift中执行这个程序时,你会得到一个 编译时错误,“attack()”在这里之前已经被声明过了。然而,另一个解决办法可能是为这个特定功能定义不同的函数名:

struct Knife {
}
struct Grenade {
}
struct Gun {
}
func attackUsingKnife(weapon:Knife) {
    //..
    print("Attacking with Knife")
}
func attackUsingGrenade(weapon:Grenade) {
    //..
    print("Attacking with Grenade")
}
func attackUsingGun(weapon:Gun) {
    //..
    print("Attacking with Gun")
}

在上面的示例中,你们使用了 struct 来创建物理对象,如Knife,Grenade和Gun。上面的示例还存在一个问题,就是我们必须记住不同函数的名字,才能调用特定的攻击动作。为了解决这个问题,使用了函数重载,即不同函数的名字相同,但传入的参数不同。

使用函数重载的相同示例

struct Knife {
}
struct Grenade {
}
struct Gun {
}
func attack(with weapon:Knife) {
    print("Attacking with Knife")
}
func attack(with weapon:Grenade) {
    print("Attacking with Grenade")
}
func attack(with weapon:Gun) {
    print("Attacking with Gun")
}

attack(with: Knife())
attack(with: Grenade())
attack(with: Gun())

输出:

Attacking with Knife
Attacking with Grenade
Attacking with Gun

程序解释

在上面的程序中,创建了三个不同的函数,它们的名称都是“attack”。它们接受不同的参数类型,通过这种方式,在不同的条件下调用这个函数。

  • 调用attack(with: Gun())触发函数func attack(with weapon:Gun)中的语句。
  • 调用attack(with: Grenade())触发函数func attack(with weapon:Grenade)中的语句。
  • 调用attack(with: Knife())触发函数func attack(with weapon:Knife)中的语句。

使用不同参数类型进行函数重载

示例:

func output(x:String) {
    print("Welcome to \(x)")
}
func output(x:Int) {
    print(" \(x)")
}
output(x: "Special")
output(x: 26)

输出:

Welcome to Special
 26

在上面的程序中,这两个函数具有相同的名称 output() 和相同数量的参数,但参数类型不同。第一个output()函数以字符串作为参数,而第二个output()函数以整数作为参数。

  • 对output(x: “Special”)的调用触发函数func output(x:String)中的语句。
  • 而对output(x: 26)的调用则触发函数func output(x:Int)中的语句。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程