Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 从if语句中断到else部分_Objective C_C_If Statement_Conditional - Fatal编程技术网

Objective c 从if语句中断到else部分

Objective c 从if语句中断到else部分,objective-c,c,if-statement,conditional,Objective C,C,If Statement,Conditional,我有一个if/else语句 if (something) { //run if logic } else { //run else logic } 在我的if逻辑阶段中,我可能会发现一些东西使我想运行if/else语句的else部分。逻辑阶段太复杂,无法只适合初始条件,某物 是否有类似于break的东西可用于跳转到if/else语句的else部分 if (something) { //run if logic } else { //run else logic

我有一个if/else语句

if (something) {
    //run if logic
} else {
    //run else logic
}
在我的
if逻辑阶段
中,我可能会发现一些东西使我想运行if/else语句的else部分。逻辑阶段太复杂,无法只适合初始条件,
某物

是否有类似于
break的东西可用于跳转到if/else语句的
else
部分

if (something) {
    //run if logic
} else {
    //run else logic
}
我目前正在这样做,但我的团队不喜欢使用goto

if (something) {
    //run if logic
    if (somethingComplex) {
        goto elseSomething;
    }
} else {
    elseSomething:
    //run else logic
}

请再次注意,
somethingelescomplex
是一种布尔状态,通过运行一些太大/多行的复杂代码来实现,这些代码不适合我的初始if条件,否则我只会执行:
if(something&&somethingscomplex)
,如果我在调用第一个条件之前计算一些复杂的东西,我会得到假阳性结果。关于
!一些

除了
转到之外,没有任何语言功能允许您像这样随意地转移控制权

另一种更好的从代码中的两个位置移动到另一个位置的方法是使用过程:方法或函数。我认为分解
else
分支的内容在这里是合适的。然后从内部
if
else
分支调用新过程


你也可以考虑重构初始条件。应该有某种方法可以将这两个检查组合起来,而不必将它们放入

if()
的头的括号中。

在Objective-C中,我会使用预先设置的布尔标志,而不是使用
if/else
,而是使用两个独立的
if
语句,就像这样(这是Swift代码,但结构相同):

但真正的Swift将为您提供一种优雅的方式,让您可以准确地完成所需的操作—一个带有故障排除功能的
开关

switch something {
case true:
    print("hey")
    if somethingComplex {
        fallthrough
    }
    print("ho")
case false:
    print("ha")
}
在上面的例子中,如果
某物
是真的,如果
某物复杂的
是真的,我们会打印“嘿”,然后打印“哈”,这正是您要寻找的流程。

那么

BOOL shouldGoToB = false;
if (a) {
    //run if logic
    if (somethingComplex) {
        shouldGoToB = YES;
    }
}

if (!a || shouldGoToB) {
}

这不是我所问问题的确切答案,但是,我认为我所问的没有答案。也就是说,这是imo下一个最简单的方法;谢谢!真正的Swift会给你一个实际的方法来做你想做的事情(一个
切换
和一个
故障切换
),但Objective-C没有。切换的另一个原因(不是双关语)到斯威夫特!我会在我的答案中添加这一点。哇!错误答案很好!我很想
切换到斯威夫特。这也为FizzBuzz提供了一个创造性的解决方案哈哈