在Objective-C上使用Enum和Switch

时间:2016-08-10 07:22:23

标签: ios objective-c if-statement enums switch-statement

我有3个文本字段的视图:

  1. 当前密码
  2. 新密码
  3. 确认新密码
  4. 要求是,要检查这些密码的有效性,如果条件不满足,将会弹出警报视图。

    1. 如果用户输入了错误的当前密码
    2. 新密码必须包含8个以上的字母
    3. 新密码必须匹配
    4. 我使用0 - if,但似乎不合适,并尝试使用else - switch。但它仍然无法奏效。

      我的代码:

      case

      }

3 个答案:

答案 0 :(得分:1)

在Objective-C中,switch语句中的参数必须是整数。

使用NS_ENUM宏将枚举声明为整数

typedef NS_ENUM (NSInteger, ErrorCase) {
    oldPasswordCase,
    newPasswordLength,
    newPasswordCheck,
};

然后声明错误变量

ErrorCase error;

正如Mateusz的答案中所提到的,你必须使用isEqualToString来比较两个字符串。

编辑:您的if - else链并非详尽无遗,可能会导致意外行为。添加默认none案例并将其分配给error,或确保if - else链考虑所有案例(感谢Idali提供的提示)。

答案 1 :(得分:1)

此代码检查两个指针​​是否相同而不是两个字符串:

[textFromBox2 isEqualToString: textFromBox3]

比较你应该使用的字符串:

MAX_INT

答案 2 :(得分:0)

我认为如果没有枚举,你可以这样做:

NSString *textFromBox1 = [stringArray objectAtIndex:0];
NSString *textFromBox2 = [stringArray objectAtIndex:1];
NSString *textFromBox3 = [stringArray objectAtIndex:2];
NSString *alertString = nil;
if ([textFromBox1 length] < 2) {
    alertString = @"現在のパスワードが間違っています。";
} else if ([textFromBox2 length] < 8) {
    alertString = @"パスワードを8文字以上で入力してください。";
} else if (![textFromBox2 isEqualToString:textFromBox3]) {
    alertString = @"新しいパスワードとパスワード(確認)が間違っています。";
}

if (alertString) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"過ち"
                                                    message:alertString
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
}