我想知道是否有一种方法可以使用方法的返回值,由if语句检查,作为变量 如果不是 。
我希望下面的代码示例有助于解释我的目标。
假设我有一个返回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的更多信息,因为我认为自己还没有充分阅读。感谢任何能让我知道这一点的人 - 如果我不可理解就道歉!
答案 0 :(得分:3)
不,没有办法使用if条件的结果。您必须声明占位符变量。
在if
语句中初始化占位符是可能的,在某些情况下甚至是允许的
UIImageView *returnedImageView;
if ((returnedImageView = [self imageViewExistsForID:<VIEWID>])) {
注意额外的括号;使用=
而不是==
是一个常见错误,因此编译器可能会发出警告而不将括号括在括号中。
答案 1 :(得分:2)
只是为了补充@Kevin的答案,有一种情况可能与你所描述的内容有关:
myVar = foo ?: bar
相当于:
if (foo) {
myVar = foo;
} else {
myVar = bar;
}
在不添加太多华夫饼干的情况下替换nil
的默认值可能是一种很好的方式。