1

我想知道是否有一种方法可以将方法的返回值(if 语句检查)用作变量 ,如果它不是 nil

我希望下面的代码示例有助于解释我所追求的。

假设我有一个返回UIImageView,的方法-(UIImageView *)imageViewExistsForID:(NSString *)viewID。在其他地方的方法中,我想检查该 imageView 是否返回一个值,并且因为它是有条件的,所以使用 if 语句,如下所示:

if ([self imageViewExistsForID:<VIEWID>]) {

// Use the returned imageView here

}
else {

// 'nil' was returned, so no need to use the result

}

通常,我会在 if 语句之前声明一个占位符变量,例如:

UIImageView *returnedImageView = [self imageViewExistsForID:<VIEWID>];

if (returnedImageView) {
...etc

我只是想知道是否有一种方法可以从方法中传递结果,当第一次由 if 语句检查时,不必先将结果存储在变量中,这更类似于:

if ([self imageViewExistsForID:<VIEWID>]) {

    UIImageView *imageView = if-statement-result 
    // ??? (i.e. don't call the method again [self imageViewExistsForID:<VIEWID>])

}

免责声明:我纯粹是从一个智力好奇的角度提出这个问题,因为这显然不是一个阻止我在代码中实现任何东西的“问题”。我总是热衷于了解更多关于 Objective-C 的知识,因为我认为自己对它的阅读还不够。感谢任何可以让我知道这一点的人 - 如果我无法理解,请道歉!

4

2 回答 2

3

不,没有办法使用 if 条件的结果。您必须声明一个占位符变量。

if语句中初始化占位符是可能的,在某些情况下甚至是允许的

UIImageView *returnedImageView;

if ((returnedImageView = [self imageViewExistsForID:<VIEWID>])) {

注意额外的括号;使用=而不是==是一个常见的错误,因此编译器可能会发出警告而不用括号括起来。

于 2013-09-03T17:48:01.190 回答
2

只是为了补充@Kevin的答案,在一种情况下可能会出现您所描述的情况:

myVar = foo ?: bar

这相当于:

if (foo) {
   myVar = foo;
} else {
   myVar = bar;
}

它可以是用默认值替换 anil而不添加太多华夫饼的好方法。

于 2013-09-03T18:34:22.413 回答