首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缩短long for/if语句的长度

缩短long for/if语句的长度
EN

Stack Overflow用户
提问于 2014-07-10 08:35:54
回答 2查看 65关注 0票数 0

我目前正在努力使我正在开发的应用程序的代码更高效、更容易阅读。基本上,这是从播放器名称的NSUserDefaults中检索数组,并用这些名称填充6个文本框(标记为6-11)。如果没有现有的数组,它将使用另一组名称。任何简化此代码的想法都将不胜感激。

代码语言:javascript
复制
if (gestureRecognizer.state == UIGestureRecognizerStateEnded) {
        NSMutableArray *names = [[NSMutableArray alloc] initWithArray:[[NSUserDefaults standardUserDefaults] objectForKey:@"nameArray"]];
        for (int i = 0; i <= 5; i++) {
            NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
            UITableViewCell *cell = [playerTable cellForRowAtIndexPath:indexPath];

            for (UIView *view in cell.contentView.subviews) {
                if ([view isKindOfClass:[UITextField class]]) {
                    UITextField *txtField = (UITextField *)view;
                    if (txtField.tag == 6) {
                        if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) {
                            txtField.text = [names objectAtIndex:0]; }
                        else {
                            txtField.text = @"Peter";
                        }
                    }
                    if (txtField.tag == 7) {
                        if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) {
                            txtField.text = [names objectAtIndex:1]; }
                        else {
                            txtField.text = @"Julia";
                        }
                    }
                    if (txtField.tag == 8) {
                        if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) {
                            txtField.text = [names objectAtIndex:2]; }
                        else {
                            txtField.text = @"Durgan";
                        }
                    }
                    if (txtField.tag == 9) {
                        if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) {
                            txtField.text = [names objectAtIndex:3]; }
                        else {
                            txtField.text = @"Bob";
                        }
                    }
                    if (txtField.tag == 10) {
                        if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) {
                            txtField.text = [names objectAtIndex:4]; }
                        else {
                            txtField.text = @"Iseland";
                        }
                    }
                    if (txtField.tag == 11) {
                        if([[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"]) {
                            txtField.text = [names objectAtIndex:5]; }
                        else {
                            txtField.text = @"Player";
                        }
                    }
                }
            }
        }
        [self saveNames];
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-10 08:48:10

你可以这样做:

代码语言:javascript
复制
NSArray *defaultNames = @[@"Peter", @"Julia",...];
int offsetIndex = 6;
BOOl needCustomNames = [[NSUserDefaults standardUserDefaults] boolForKey:@"customNames"];
for (UIView *view in cell.contentView.subviews)
{
    if ([view isKindOfClass:[UITextField class]]) 
    {
        UITextField *txtField = (UITextField *)view;
        int index = [txtField tag]-offsetIndex;
        if (tag >= 6 && tag <= 11)
        {
            if (needCustomNames)
                textField.text = [names objectAtIndex:index];
            else
                textField.text = [defaultNames objectAtIndex:index];
        }
    }
}

例如,您在for循环中多次调用相同的行,比如检查是否需要使用自定义名称(NSUserDefaults行)。

我使用自定义名称的NSArray来模拟相同的逻辑,并使用偏移量来澄清它。

票数 5
EN

Stack Overflow用户

发布于 2014-07-10 08:39:18

我建议对您的代码进行冗余分析,并以不同的方法排除它们。因此,您必须只调用extern方法,而不是一次又一次地调用每个代码方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24671887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档