0

愚蠢的问题:假设我在条件语句中分配了一个 var。我不知道条件是否会得到满足,我仍然希望定义 var .. 写这个的正确方法是什么

例子:

    NSDecimalNumber *number = [[NSDecimalNumber alloc]init];  // this is pointless right?

    if(x == z){
        number = [whatevernum1 decimalNumberByMultiplyingBy: whatevernum2];
    } else {
        number = [whatevernum2 decimalNumberByDividingBy: whatevernum3];
    }

    // do something with number variable.
4

3 回答 3

2

无需初始化number,因为它会被设置。只需这样做:

NSDecimalNumber *number;

if(x == z){
    number = [whatevernum1 decimalNumberByMultiplying: whatevernum2];
} else {
    number = [whatevernum2 decimalNumberByDividing: whatevernum3];
}

// do something with number variable.

在您的情况下number,将以一种或另一种方式分配一个值。但是你可能会遇到这样的情况:

if (someCondition) {
    // set number to value A
} else if (anotherCondition) {
    // set number to value B
}

在这里,可能两个条件都不满足。number在这种情况下,您需要通过初始化为 来正确处理此问题nil

NSDecimalNumber *number = nil;

if (someCondition) {
    // set number to value A
} else if (anotherCondition) {
    // set number to value B
}

if (number) {
    // process result
}
于 2013-07-23T21:42:37.983 回答
0

您需要声明变量但不分配它,如下所示:

NSDecimalNumber *number;

if(x == z){
    number = [whatevernum1 decimalNumberByMultiplying: whatevernum2];
} else {
    number = [whatevernum2 decimalNumberByDividing: whatevernum3];
}

这告诉编译器你想使用一个名为 number 的变量,但还没有它的值。在某些情况下,您可能会发现将变量初始化为 nil 比将其保留为空指针更方便。

于 2013-07-23T21:40:02.523 回答
0

通常,正如其他人指出的那样,您要么不初始化(如果您可以保证您将设置一个值,例如通过 if/else 对),或者您将初始化为nil.

在这个简单的例子中,三元语句会让你的代码更清晰:

NSDecimalNumber *number = x == z ? [whatevernum1 decimalNumberByMultiplyingBy:whatevernum2] : [whatevernum2 decimalNumberByDividingBy:whatevernum3];
于 2013-07-23T23:53:57.923 回答