在Objective-C中是否可以创建内联块并使用其返回类型?例如,我可以创建一个返回BOOL
的块,使其内联,并使用其返回类型进行赋值。
BOOL b = <inline block that returns BOOL> { // unsure of the syntax / legality of this
return YES; // will be more logic in here, that is why I want to use a block.
};
我遇到块语法问题,不确定是否可以内联创建块。我检查了以下资源但没有用。
感谢您的时间和耐心,如果这不可能或非常容易。
答案 0 :(得分:6)
实现该结果的另一种方法是"compound statement expression":
BOOL b = ({
BOOL result;
// other local variables and stuff, computing "result"
result; // The last expression is the value of this compound statement expression.
});
这是C语言的GCC扩展(并且也被Clang理解)。它看起来 类似到一个块,但是有些不同。
答案 1 :(得分:3)
您需要做什么使用以下内容:
BOOL b = ^(){ return YES; }();
这实际上创建了块然后调用它。虽然阅读起来并不好,所以你也可以这样做:
BOOL b = NO;
{
// Other stuff, will be local
b = YES;
}
答案 2 :(得分:1)
我真的没有看到这个的好理由,但你确实可以做到。只需在块
之后调用函数调用括号BOOL b = ^{
return YES;
}();
这与单独声明和使用它,然后内联它完全相同。
BOOL (^returnB)() = ^{
return YES;
};
BOOL b = returnB();
答案 3 :(得分:1)
您不需要创建阻止来执行此操作。如果你没有将Block本身分配给变量以便以后重用,那么它就没有意义了。只需进行必要的计算并将结果放入b
。
BOOL b = ^BOOL(NSString * s, int n){
unichar c = [s characterAtIndex:n];
return c == "w";
}(myString, 5);
应该只是
unichar c = [myString characterAtIndex:5];
BOOL b = c == "w";
如果您因某种原因而担心范围界定,请使用复合语句(将行括在大括号中)或statement expression。