是否有替代重复的If语句?

时间:2014-02-11 19:31:03

标签: ios objective-c if-statement

我想检查UITextFields中的条件,基本上,如果它发生了变化,如果是,我想更改数据并保存到数据库。我的代码看起来像这样:

if (![self.nomeTextField.text isEqualToString:self.usuario[@"nome"]]) {
    self.usuario[@"nome"] = self.nomeTextField.text;
}
if (![self.sobrenomeTextField.text isEqualToString:self.usuario[@"sobrenome"]]) {
    self.usuario[@"sobrenome"] = self.sobrenomeTextField.text;
}

if (![self.nascimentoTextField.text isEqualToString:self.usuario[@"nascimento"]]) {
    self.usuario[@"nascimento"] = self.nascimentoTextField.text;

此代码位于button操作method内。当用户按下button时,它会检查已更改的UITextFields并将值更新为object。这样,我只创建一个网络连接以立即保存object

现在,我的问题是,如果可以重复if statements这样做,并且有更简单的方法可以做到这一点。我并不关心UITextFields,我知道我可以使用delegate一次更改每个textField并稍后保存。但我正在寻找的是要了解我所做的事情是否正确以及是否有替代这些重复的if statements

3 个答案:

答案 0 :(得分:2)

在您的情况下,switch语句将不起作用,因为您始终要处理所有文本字段。在这种情况下,您可以将所有文本字段放入字典中,其中键是self.usuario字典中键的名称。然后,您可以迭代数组并使用密钥的名称和相关的文本字段进行验证。

如果您想要更改每个文本字段,那么您需要能够将作为参数传递的文本字段与明确的密钥名称相关联。这可以通过搜索来完成,或者您可以考虑使用objc_setAssociatedObject来关联密钥字符串。

在任何一种情况下,使用某些数据结构都有助于减少代码。但这是一个权衡。减少代码通常意味着更大的内存使用量,但它通常更容易理解,而且通常不易出错。

答案 1 :(得分:1)

我会实现UITextFieldDelegate的{​​{1}}方法,并跟踪那里编辑的字段。然后,当单击该按钮时,您可以浏览该列表并更新相关字段。

或者您可以修改此方法并在textFieldDidEndEditing:中更新您的对象。

答案 2 :(得分:1)

如何使用字典,然后循环遍历字典中的每个键值对来检查字段?

将要检查的每个字段设置为键(例如,self.nomeTextField),将测试值设置为值(self.usario [@“nome”])。

NSDictionary *myDictionary = @{
    self.nomeTextField : self.usario[@"nome"],
    self.sobrenomeTextField : self.usario[@"sobrenome"],
    AND SO ON AND SO FORTH . . .
};

然后,只需遍历沿着这些行运行某些内容的字典

for ($KEY in myDictionary)
    if (!$KEY.text isEqualToString:$VALUE) {
        DO SOMETHING HERE
    }

如果您希望将来有更多字段,这样可以轻松扩展。

如果我的代码/概念存在差距,我道歉。我目前无法测试特定代码来验证功能。

希望这有帮助!祝你好运!