你只要这样做。
coverConditions();
executeThisFunctionInAnyCase();
function coverConditions()
{
bool conditionA = executeStepA();
if (!conditionA) return;
bool conditionB = executeStepB();
if (!conditionB) return;
bool conditionC = executeStepC();
if (!conditionC) return;
}
99乘以100,这是唯一的方法。
永远、永远、永远不要尝试用计算机代码做一些“棘手”的事情。
顺便说一下,我很确定以下是你脑海中实际的解决方案…
continue语句在算法编程中非常重要。(同样,goto语句在算法编程中也很关键。)
在许多编程语言中,你可以这样做:
-(void)_testKode
{
NSLog(@"code a");
NSLog(@"code b");
NSLog(@"code c\n");
int x = 69;
{
if ( x == 13 )
{
NSLog(@"code d---\n");
continue;
}
if ( x == 69 )
{
NSLog(@"code e---\n");
continue;
}
if ( x == 13 )
{
NSLog(@"code f---\n");
continue;
}
}
NSLog(@"code g");
}
(首先要注意:像这个例子一样的裸块是编写漂亮代码的关键和重要部分,特别是如果你在处理“算法”编程。)
再说一遍,你脑子里就是这么想的,对吧?这是很漂亮的写法,所以你有很好的直觉。
然而,不幸的是,在objective-c的当前版本中(对不起,我不知道Swift)有一个可笑的功能,它检查封闭的块是否是一个循环。
下面是你如何解决这个问题的方法……
-(void)_testKode
{
NSLog(@"code a");
NSLog(@"code b");
NSLog(@"code c\n");
int x = 69;
do{
if ( x == 13 )
{
NSLog(@"code d---\n");
continue;
}
if ( x == 69 )
{
NSLog(@"code e---\n");
continue;
}
if ( x == 13 )
{
NSLog(@"code f---\n");
continue;
}
}while(false);
NSLog(@"code g");
}
所以不要忘记…
do {} while(false);
只是意味着“做这个块一次”。
也就是说,写do{}while(false)完全没有区别;简单地写{}。
这现在工作完美,因为你想要…这是输出…
所以,这可能就是你在脑海中看到的算法。你应该试着把脑子里的东西写下来。(尤其是你不清醒的时候,因为那个时候你的美就出来了!:))
在“算法”项目中,这种情况经常发生,在objective-c中,我们总是有一个宏…
#define RUNONCE while(false)
... 然后你可以这样做…
-(void)_testKode
{
NSLog(@"code a");
int x = 69;
do{
if ( x == 13 )
{
NSLog(@"code d---\n");
continue;
}
if ( x == 69 )
{
NSLog(@"code e---\n");
continue;
}
if ( x == 13 )
{
NSLog(@"code f---\n");
continue;
}
}RUNONCE
NSLog(@"code g");
}
有两点:
首先,尽管objective-c检查continue语句所在的块类型很愚蠢,但“对抗它”很麻烦。所以这是一个艰难的决定。
第二,在这个例子中,你是否应该缩进那个block?这样的问题会让我失眠,所以我不能给你建议。
希望能有所帮助。