【问题标题】:Referring to BOOL values in Objective-C methods在 Objective-C 方法中引用 BOOL 值
【发布时间】:2011-10-14 14:47:51
【问题描述】:

这是一小部分代码:

@interface
BOOL isCarryingmallet;

@implementation

-(BOOL)isCarryingWeapon {
   return isCarryingMallet;
}

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

我不明白这是如何工作的。 return isCarryingmMallet; 是否返回 YES 或 NO?为什么(isCarryingMallet) 中没有== YES?为什么是if (isCarryingMallet) 而不是if (isCarryingWeapon)。 感谢您回答我的新手问题!

【问题讨论】:

  • 在学习一门新语言时为强制性 RPG 格斗游戏投票。我的第一个 Obj-C 被称为“中世纪战斗”:P

标签: objective-c boolean


【解决方案1】:

isCarryingWeapon 方法返回isCarryingMallet 变量的值。如果还有其他可能的武器,该方法可能会返回一个更复杂的值,例如(isCarryingMallet || isCarryingPlasmaCannon)。基本上现在对这个职业来说唯一重要的武器就是木槌。当isCarryingWeapon 方法被调用时,这个类对自己说:“我拿着木槌吗?”如果是这样,它知道它携带武器,所以它返回真——“是的,我有武器。”否则返回 false。

至于if 问题 - 所有if 语句所做的就是确定括号中的值是真还是假。等式语句在 if 语句中很常见,但它们根本不是必需的。更具体地说,任何不是 0、null 或 nil 的东西都是真的。所以下面都会执行花括号里的代码:

if (1) {...}
if (37) {...}
if (YES) {...}
if (true) {...}

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

if (isCarryingMallet) {...}

作为

如果这家伙拿着木槌,那么……

【讨论】:

  • 谢谢!如果没有 isCarryingWeapon 方法,到此代码为止,它仍然能够运行吗?
  • 这一切都取决于如何在其他地方使用这个类。如果其他函数正在调用 isCarryingWeapon,你就不能摆脱它。但是一般来说,如果没有它,这个类也可以正常工作。
【解决方案2】:

方法isCarryingWeapon返回isCarryingSword布尔值。

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

【讨论】:

    【解决方案3】:

    为什么“if (isCarryingMallet)”中没有“== YES”?

    默认情况下,if 中的语句只有在条件为真时才会执行。所以,

    if (isCarryingMallet) { /* ... */ }
    

    根据isCarryingMallet 的值,执行语句。这样想——

    if ( true ) { /* ... */ } // if isCarryingMallet value is true
    

    【讨论】:

    • 哦。那么 -(BOOL)isCarryingWeapon 会做什么呢?
    • 它返回 isCarryingMallet 的值。显然,根据这段代码,如果一个人携带木槌,那么他们就是携带武器。
    【解决方案4】:

    是否“返回 isCarryingMallet;”返回 YES 或 NO?

    你的意思是返回哪个值?我们不知道。 值未在您的代码中设置 sn-p。

    您的代码 sn-p 假设我们会在其他地方找到一些代码将该变量设置为 YES 或 NO(实际上是数字,而不是文本或真正的布尔值,因为 C 和 Objective-C 缺少真正的布尔值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多