ios - 重构 iOS 代码 : Decreasing the number of lines of code

标签 ios optimization coding-style refactoring

我第一次在这里使用实际有效的代码发布问题!但是,我相信有一种方法可以减少代码中的行数。希望有高手指点方法。

这是供引用的 Storyboard窗口:

enter image description here

我有一个带有容器 View 的主视图 Controller 。 ContainerView 有它自己的导航 Controller 。主视图 Controller Segue 左侧的每个按钮 (B1-B5) 与其各自的场景编号。即 B2 会将场景 2 压入堆栈。 B4 会将场景 4 压入堆栈。如果 visibleViewContoller 是场景 5,并且用户按下 B1,它将弹出所有 viewController 直到我们到达场景 1。依此类推。

下面的代码再次工作正常,我只是想缩小 B1 和 B2 的代码大小:

- (IBAction)B1Pressed:(id)sender {

UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
NSMutableArray *VCs = [navController.viewControllers mutableCopy];
UIViewController *visibleViewController = [navController visibleViewController];

if (visibleViewController == [VCs objectAtIndex:0])
{
    return;
}
else if (visibleViewController ==[VCs objectAtIndex:1])
{
     [navController popViewControllerAnimated:YES];
}

else if (visibleViewController ==[VCs objectAtIndex:2])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];
}

else if (visibleViewController ==[VCs objectAtIndex:3])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:4])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:5])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

    }
}

- (IBAction)B2Pressed:(id)sender {

UINavigationController *navController = [self.childViewControllers objectAtIndex:0];
NSMutableArray *VCs = [navController.viewControllers mutableCopy];
UIViewController *visibleViewController = [navController visibleViewController];

if (visibleViewController == [VCs objectAtIndex:0])
{
    STLMEatDrinkViewController *stlmEDVC = [self.storyboard instantiateViewControllerWithIdentifier:@"B2"];
    [navController pushViewController:stlmEDVC animated:YES];
}
else if (visibleViewController ==[VCs objectAtIndex:1])
{
    return;
}

else if (visibleViewController ==[VCs objectAtIndex:2])
{
    [navController popViewControllerAnimated:YES];
}

else if (visibleViewController ==[VCs objectAtIndex:3])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:4])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];

}
else if (visibleViewController ==[VCs objectAtIndex:5])
{
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:NO];
    [navController popViewControllerAnimated:YES];   
 }
}

现在想象一下,为 B3Pressed、B4Pressed 和 B5Pressed 再写三次相同的代码。我认为代码太多了,我几乎肯定有更好的方法来解决这个问题。

谢谢。

最佳答案

1.) 您不得使用== 比较对象。使用 isEqual:

2.) 循环。

int idx = [VCs indexOfObject:visibleViewController];

if (idx == 0) {
    STLMEatDrinkViewController *stlmEDVC = [self.storyboard instantiateViewControllerWithIdentifier:@"B2"];
    [navController pushViewController:stlmEDVC animated:YES];
} else if (idx == 1) {
    return;
} else {
    int i;
    for (i = 2; i < idx; i++) {
        [navController popViewControllerAnimated:NO];
    }

    [navController popViewControllerAnimated:YES];
}

关于ios - 重构 iOS 代码 : Decreasing the number of lines of code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792055/

相关文章:

ios - 以缩放不变的方式在 UIScrollView 中绘制图像

iphone - 简单的函数让我在 Objective-C 上崩溃

iphone - NSURLRequest 发布到 HTTPS URL 安全吗?

oracle - 在 Oracle 中循环 CURSOR 时使用 EXIT WHEN 指令是一种不好的做法吗?

coding-style - CSS3 的智能方法

python - 当你不需要 python 中的索引时,你如何创建一个 For 循环?

ios - Speakerbox IOS callkit UI 在接听电话后隐藏自身

r - R中的体育简单评分系统实现

javascript - FastDOM - 每 17 毫秒读/写一次?

tensorflow - Tfrecord 与 TF.image?