📅  最后修改于: 2021-01-11 07:47:41             🧑  作者: Mango
如果两个以上的函数具有相同的名称但参数不同,则它们称为重载函数,此过程称为函数重载。
让我们假设一个条件。您必须开发一种射击游戏,玩家可以使用刀,手榴弹和枪支攻击敌人。让我们看看您的攻击功能解决方案可能是如何将动作定义为功能:
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”创建了三个不同的功能。它需要不同的参数类型,通过这种方式,我们在不同的条件下调用此函数。
例:
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()函数将整数作为参数。