在Objective-C方法中涉及到BOOL值

3
这是一小部分代码:

这是一小段代码:

@interface
BOOL isCarryingmallet;

@implementation

-(BOOL)isCarryingWeapon {
   return isCarryingMallet;
}

-(int)getWeaponDamage {
    if (isCarryingMallet) 
        return kVikingMalletDamage;
    else
        return kVikingFistDamage;
}

我不理解这是怎么工作的。 return isCarryingmMallet; 返回 YES 还是 NO?为什么在 (isCarryingMallet) 的 if 语句里没有 == YES?为什么是if (isCarryingMallet)而不是if (isCarryingWeapon)

感谢您回答我的新手问题!


1
在学习新语言时,玩一款RPG格斗游戏是必须的。我的第一个Obj-C项目叫做“中世纪格斗” :P - Alec Sloman
4个回答

4
isCarryingWeapon方法返回isCarryingMallet变量的值。如果有其他可能的武器,该方法可以返回更复杂的值,例如(isCarryingMallet || isCarryingPlasmaCannon)。基本上,现在对这个类来说唯一重要的武器是木槌。当调用isCarryingWeapon方法时,该类会对自己说:“我是否携带木槌?”如果是,它知道自己携带了武器,因此返回true-“是的,我有武器。”否则返回false。
至于if问题 - 所有if语句只是确定括号中的值是否为真或假。相等语句在if语句中非常常见,但并不是必需的。更具体地说,任何不为0、null或nil的东西都是true。因此,以下所有内容都将执行花括号中的代码:
if (1) {...}
if (37) {...}
if (YES) {...}
if (true) {...}

布尔变量通常以前缀is命名,这样可以使语法更加自然。在你的情况下,你可以解析。

if (isCarryingMallet) {...}

as

If this guy is carrying a mallet, then...


谢谢!如果isCarryingWeapon方法不存在,那么现在的代码还能正常运行吗? - stumped
这完全取决于这个类在其他地方的使用方式。如果其他函数正在调用isCarryingWeapon,你不能仅仅将其删除。但一般情况下,这个类没有它也能正常工作。 - Luke

0
"return isCarryingMallet;" 返回的是YES还是NO?
您的意思是返回哪个值?我们不知道。在您的代码片段中,该值未被设置
您的代码片段假设在其他地方,我们会找到一些代码将该变量设置为YES或NO(实际上是数字,而不是文本或真正的布尔值,因为C和Objective-C缺乏真正的布尔值)。

0

isCarryingWeapon 方法返回 isCarryingSword 布尔值的值。

getWeaponDamage 方法中,您不需要进行显式比较,例如 isCarryingMallet == TRUE,因为 if 语句将直接检查 isCarryingMallet 的值,并将该值用作比较的结果。换句话说,如果它是 TRUE,则 if 语句将与如果它进行了两个值之间的比较并且该比较返回 TRUE 时行为相同。


0
为什么在“if (isCarryingMallet)”中没有“== YES”?默认情况下,只有当条件为真时,才会执行if语句中的语句。
if (isCarryingMallet) { /* ... */ }

根据isCarryingMallet的值,执行语句。可以这样想 -
if ( true ) { /* ... */ } // if isCarryingMallet value is true

哦。那么-(BOOL)isCarryingWeapon是做什么的呢? - stumped
它返回isCarryingMallet的值。根据这段代码,如果一个人携带着木槌,那么他们就携带着武器。 - wadesworld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接