【问题标题】:Can an If Statement tell if an assignment was valid?If 语句可以判断分配是否有效?
【发布时间】:2012-06-14 17:07:53
【问题描述】:

我有一个对象,如果成功则返回一个值,如果失败则返回 false(或 nil)。

我想将该值赋给一个变量

if(var1 = [object foo])
{
    //if the [object foo] returned a variable, goes here
}
else
{
    //[object foo] returned FALSE (or nil), go here
}

如果赋值有效,是否可以检测 If 语句?

【问题讨论】:

  • 有效是什么意思?您提供的代码将起作用,但通常最好将作业包装在 () 中,所以 if((var1 = [object foo]))
  • 任何不为 false 或 nil 的东西

标签: objective-c ios if-statement


【解决方案1】:

这没关系,但会产生警告,因为这是一个常见的拼写错误(= 而不是==)。要使该警告静音,请添加另一组括号,如下所示:

if ((var = [object foo])) ...

由于这很容易导致误解,因此很多人会建议不要这样做。对于一个简单的if 语句,首先进行赋值要清楚得多:

var = [object for];
if (var) ...

while 循环中,这更有用,但也被许多人认为是有害的。

【讨论】:

    【解决方案2】:

    不确定我是否理解您的问题,但让我尝试解释一些您可以检查的情况

    1) 属性包含值

    if ([object foo])
    {
        // If foo has a value associated to it that is not nil/false/zero
    }
    else
    {
        // If foo equals nil, false or zero
    }
    

    2) 变量赋值成功

    if ((bar = [object myMethod]))
    {
        // If myMethod returns any non-nil value
    }
    else
    {
        // If myMethod returns nil
    }
    

    3) 之前的变量赋值成功

    bar = [object myMethod];
    
    if (bar)
    {
        // If bar has a value associated to it that is not nil/false/zero
    }
    else
    {
        // If bar equals nil, false or zero
    }
    

    【讨论】:

    • 是的,我对两个示例 1 和 3 的新方法,我不确定如何执行示例 2 或者它是否可行。对我来说,这似乎是一种比其他示例更简单的方法。
    【解决方案3】:

    在 if 语句中使用 == 而不是 =

    在 if 语句之前,你可能有var1 = [object foo] see comparison operators

    【讨论】:

    • = 是正确的,如果他确实希望也分配值并测试值,但如果他想比较这两个值,那么是的==
    • 他的内联 cmets 状态://if the [object foo] returned a variable, goes here。我认为 OP 有点困惑,可能确实想要=
    • 我确实想要“=”,这是一个分配,而不是比较。
    【解决方案4】:

    如果您的意思是valid 变量包含预期结果,您可以针对预期结果对变量执行另一个if,或者null 来检查它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 2021-11-06
      • 2016-10-29
      相关资源
      最近更新 更多