作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以前几天我刚开始使用 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/
我是一名优秀的程序员,十分优秀!