我有很多if else条件如何减少它们

时间:2017-02-11 21:35:55

标签: objective-c

我有一个文本字段,并使用numberOfRowsInSection创建超过50个文本字段。之后我使用if else条件,但这是耗费时间和冗长的方法所以我想减少我的if else条件。我不想使用切换条件。我该怎么办?

if (textField.tag == 0)//cust add line 1
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 0)];
}
else if (textField.tag == 1)//cust add line 2
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 0)];
}

else if (textField.tag == 2)//kyc line 1
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 50)];
}
else if (textField.tag == 3)// kyc line 2
{

    [self.view endEditing : YES];

    DatePickerViewController *dateViewContrl = [self.storyboard instantiateViewControllerWithIdentifier : @"DatePickerViewController"];

    dateViewContrl.delegate = self;

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
    {
        //dateViewContrl.preferredContentSize=CGSizeMake(325, 200);
        dateViewContrl.preferredContentSize = CGSizeMake(290, 200);
    }

    popcontrol = [[WYPopoverController alloc] initWithContentViewController:dateViewContrl];
    [popcontrol.delegate self];

    //        _currentfield=_dateTextField;
    NSLog(@"%f   %f",popcontrol.popoverContentSize.height,popcontrol.popoverContentSize.height);
        CGRect rect_ = [self.view convertRect : textField.frame fromView : textField.superview];
    [popcontrol presentPopoverFromRect : rect_
        inView : self.view
        permittedArrowDirections : WYPopoverArrowDirectionAny
        animated : YES
        options : WYPopoverAnimationOptionScale];

    return NO;
}
else if (textField.tag == 4)
{
    [textField resignFirstResponder];
    [self DropDownGendview : textField];
    return NO;
}
else if (textField.tag == 5)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 250)];
}
else if (textField.tag == 6)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 310)];
}
else if (textField.tag == 7)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 370)];
}
else if (textField.tag == 8 || textField.tag == 13 || textField.tag == 20)
{
    [self.view endEditing : YES];
    [self DropDownview : textField];
    return NO;
}
else if (textField.tag == 9)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 510)];
}
else if (textField.tag == 10)//cor email
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 630)];
}
else if (textField.tag == 11)//desig
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 700)];
}
else if (textField.tag == 12)//level
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 770)];
}
else if (textField.tag == 14)//level
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 910)];
}
else if (textField.tag == 15)//level
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 980)];
}
else if (textField.tag == 16)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1050)];
}
else if (textField.tag == 17)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1140)];
}
else if (textField.tag == 18)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1240)];
}
else if (textField.tag == 19)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1310)];
}
else if (textField.tag == 21)
{
    NSLog(@"state dropdown %ld",(long)textField.tag);
}
else if (textField.tag == 22)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1520)];
}
else if (textField.tag == 23)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1590)];
}
else if (textField.tag == 24)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1660)];
}
else if (textField.tag == 25)
{
    [_customerFormTableView setContentOffset : CGPointMake(0, 1730)];
}
else if (textField.tag == 26)
{
    [self.view endEditing : YES];
    [self dropDownPurposeView : textField];
    return NO;
}

2 个答案:

答案 0 :(得分:1)

您可以使用结构代表很多这些 if 语句与数据:

typedef struct
{
    int tag;
    int pointX;
    int pointY;
} Values;

const Values values[] = {
    {0, 0, 0},
    {1, 0, 0},
    {2, 0, 50},
    // etc
};

然后遍历并确定您的标记是否在其中:

int i;
bool found = false;

for (i = 0; i < sizeof(values) / sizeof(values[0]); i++)
{
    if (values[i].tag == textField.tag)
    {
        [_customerFormTableView setContentOffset: CGPointMake(values[i].pointX,
                                                              values[i].pointY)];
        found = true;
        break;
    }
 }

 if (! found)
 {
      // do more complicated operations here
 }

如果标记已排序,您可以使用二进制搜索加快 for 语句。

答案 1 :(得分:0)

你可以尝试使用switch case语句。它更好,而不是有很多if else条件。如果你使用swit case它会提高你的性能,而不是有多个if else条件。

switch语句允许根据值列表测试变量的相等性。每个值都称为大小写,并且为每个开关检查打开的变量

        switch(expression){
               case constant-expression  :
                   statement(s);
                   break; /* optional */
               case constant-expression  :
                    statement(s);
                    break; /* optional */

             /* you can have any number of case statements */
                default : /* Optional */
                statement(s);
           }

通常,switch语句中使用的表达式必须具有整数或枚举类型,或者是类类型,其中类具有单个转换函数为整数或枚举类型。

有关详细信息,请使用此https://www.tutorialspoint.com/objective_c/switch_statement_in_objective_c.htm

相关问题