gpt4 book ai didi

Swift 4 - 如何让一个函数在该函数外设置一个变量

转载 作者:行者123 更新时间:2023-11-28 13:53:18 24 4
gpt4 key购买 nike

所以前几天我刚开始使用 Swift。在搞乱一些代码时,我试图编写一个函数,让目标玩家攻击和敌人,并让敌人的 HP 减少玩家的攻击力。函数内部一切正常,但我似乎无法找到一种方法让它在函数外部影响选定的敌人。也许它会在以后的类(class)中出现,但在我的脑海中,它应该是一些我似乎无法理解的简单东西。

这是我正在使用的代码。

struct Player {
var maxHP: Int
var currentHP: Int
var maxMP: Int
var currentMP: Int
var currentLVL: Int
var damageATT: Int
}

struct Enemy {
var maxHP: Int
var currentHP: Int
var damageAtt: Int
}

var alexRider = Player(maxHP: 100, currentHP: 100, maxMP: 100, currentMP: 100, currentLVL: 1, damageATT: 5)
var enemyOne = Enemy(maxHP: 20, currentHP: 20, damageAtt: 2)
var enemyTwo = Enemy(maxHP: 40, currentHP: 40, damageAtt: 4)

func attackTarget(attacker player: Player, enemy target: Enemy) {
var attackTAR = target
attackTAR.currentHP -= player.damageATT
print("Dealt \(player.damageATT) damage!")
print("Enemy now has \(attackTAR.currentHP) health remaining")
}

attackTarget(attacker: alexRider, enemy: enemyTwo)
print(enemyTwo.currentHP)

显然,当我在代码末尾打印 currentHP 时,它与开始时相同,因为函数内部变量的范围不会传递到外部。函数内的打印命令可以很好地显示内部实例的损坏量和剩余 HP。

我在这里缺少一些简单的东西吗?我再次知道这应该是一件简单的事情,但刚刚开始我希望有人能指出我正确的方向。

谢谢。

最佳答案

因此,在 Swift 中我们仍然可以通过引用传递。这允许它在我们的参数可变的地方,因为在默认情况下,比如你的,它们是 let 变量而不是可变的。

我们能做的是,

attackTarget(attacker: alexRider, enemy: &enemyTwo)

还有,

func attackTarget(attacker player: Player, enemy target: inout Enemy) {

你可以看到这里,inout类似于C中的pass by reference variable,我们只需要让它被Swift编译器知道即可。这将允许您的变量更改其自身的变量。

关于Swift 4 - 如何让一个函数在该函数外设置一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54263692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com