在Objective-C中使用带有三元运算符的块

Osc*_*ros 1 objective-c objective-c-blocks

有没有办法在Objective-C中使用带三元运算符的块?

我正在尝试做类似的事情:

[self evaluate] ? ^{
    // do somethings
} : ^{
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

Log*_*gan 5

你得到的结果是未使用的,因为你根本没有分配你的块

void (^someBlock)(void) = [self evaluate] ? ^{
    // do somethings
} : ^{
    // do something else
};

someBlock();
Run Code Online (Sandbox Code Playgroud)

更新

正如@MartinR指出的那样,如果你更喜欢变得更复杂,你可以在三元组中调用块:

[self evaluate] ? ^{
    // do somethings
}() : ^{
    // do something else
}();
Run Code Online (Sandbox Code Playgroud)

更新2

实际的卷积@MartinR暗示:

([self evaluate] ? ^{
    // do somethings
} : ^{
    // do something else
})();
Run Code Online (Sandbox Code Playgroud)

注意

正如@zaph和@joshCaswell在评论中指出的那样,虽然这在技术上是正确的(最好的正确)但它可能不是最好的做法.在更新中提到的执行块内联的情况下,如此答案中提到的那样特别奇怪.

  • 您甚至可以调用块而不将其分配给变量(使其更复杂:-) (4认同)