【问题标题】:Objective-C: Returning int to BOOL methodObjective-C:将 int 返回到 BOOL 方法
【发布时间】:2012-06-10 11:45:30
【问题描述】:

我是 Objective-C 的新手,我想知道为什么这个方法可以编译,谁能解释一下为什么?

谢谢

-(BOOL) isEnabled{
   return 56;
}

【问题讨论】:

  • 有一个隐式转换 - 最后一行实际上是:return (BOOL)56;
  • 我就知道你会这么问。

标签: objective-c methods integer boolean


【解决方案1】:

你可以把objective-c中的BOOL想象成

false === 0 === nil   //Anything that is zero or nil is false
true = !false         //Anything that is NOT zero or nil is true. 

56 因此返回 true,因为它不为零

【讨论】:

  • 不,不是。 Objective-C 中的 BOOL 是 signed char
  • 我的“定义”有点误导,我已经修改了。
  • NSLog(@"%d",[self isenabled]); 返回56。是不是很奇怪?
  • 不,这是意料之中的。 56 适合 signed char
  • 从数学上讲,布尔值是真还是假,但在目标 c 中,您的布尔值可以存储多个值。零值被视为假。非零值是正确的,除了我在答案中添加的 256 的倍数。
【解决方案2】:

Objective-C 中的BOOLsigned chartypedef。由于 56 适合该类型,因此从文字 int 进行隐式转换不会导致数据丢失。

【讨论】:

  • Zillan,还请注意,如果它依赖于 YESNO 值,这可能会破坏代码。例如。 if([self isEnabled] == YES] 会失败,而if([self isEnabled]) 会工作。
  • 是的,这就是为什么正常的编码风格会避免与这些常量进行比较,而只将它们用于赋值。
  • 你真的应该看看这篇文章:weblog.bignerdranch.com/564-bools-sharp-corners
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 1970-01-01
  • 2017-02-22
  • 2012-03-15
  • 2011-10-14
  • 2014-06-05
  • 2019-07-08
相关资源
最近更新 更多