本文概述
- 函数重载的必要性
- 函数重载的相同示例
- 程序说明
- 具有不同参数类型的函数重载
函数重载的必要性让我们假设一个条件。你必须开发一种射击游戏, 玩家可以使用刀, 手榴弹和枪支攻击敌人。让我们看看你的攻击功能解决方案如何将操作定义为功能:
例:
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(witharmer:Gun)中的语句。
- 调用Attack(with:Grenade())会触发func Attack函数(wither:Grenade)中的语句。
- 函数func Attack(with武器:Knife)内部的call Attack(with:Knife())语句。
func output(x:String) {
print("Welcome to \(x)")
}
func output(x:Int) {
print(" \(x)")
}
output(x: "Special")
output(x: 26)
【Swift函数重载介绍和用法示例】输出
Welcome to Special
26
在上面的程序中, 两个函数具有相同的名称output()和相同数量的参数, 但参数类型不同。第一个output()函数将字符串作为参数, 第二个output()函数将整数作为参数。
- 对output(x:” Special” )的调用会触发函数func output(x:String)中的语句。
- 调用output(x:26)会触发函数func output(x:Int)中的语句。
推荐阅读
- Swift嵌套函数介绍和用法示例
- Swift函数参数和返回值用法示例
- Swift字符串介绍和用法详细示例
- Swift函数介绍和用法详细示例
- Swift repeat-while循环语句用法示例
- Swift While和Repeat While循环语句用法
- Swift for-in循环语句介绍和用法示例
- Swift 4循环语句基本介绍
- Swift break语句介绍用法示例