4

我在我的应用程序中编写了以下代码:

typedef enum{
    PasswordModeEnter = 1,
    PasswordModeSetNewPassword = 3,
    passwordModeVerify = 5,
    PasswordModeChange = 7,
    PasswordModeDisabled = 9
}PasswordModes;

我实例化了一个名为 PasswordMode 的对象。

- (id)initWithPasswordMode:(PasswordModes *)passwordMode nibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        self.PasswordMode = passwordMode;
    }
    return self;
}

我在编写以下代码时遇到了一个奇怪的错误:

switch (self.PasswordMode) {
        case PasswordModeChange:
            //do something
            break;

        case PasswordModeDisabled:
            //do something
            break;
        case PasswordModeEnter:
            //do something
            break;

        case PasswordModeSetNewPassword:
            //do something
            break;
        case passwordModeVerify:
            //do something
            break;

        default:
            break;
    }

我收到以下错误:

语句需要整数类型的表达式。

有什么问题,我该如何解决?

4

3 回答 3

14

问题在于这个

ProblemModes *

* 应该被删除。

于 2013-10-31T13:23:10.747 回答
6

PasswordModes 只是一个枚举,您的 init 方法错误地指示它是一个指针。init 方法签名应如下所示:

- (id)initWithPasswordMode:(PasswordModes)passwordMode nibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil;

您的财产应如下所示:

@property (nonatomic,assign) PasswordMode passwordMode;
于 2013-10-31T13:23:54.733 回答
4

您应该指定枚举的类型,您可能还想使用新的枚举语法。

typedef NS_ENUM(NSInteger, PasswordMode) {
  PasswordModeEnter          = 1,
  PasswordModeSetNewPassword = 3,
  passwordModeVerify         = 5,
  PasswordModeChange         = 7,
  PasswordModeDisabled       = 9
};

您可以按如下方式使用它:

PasswordMode mode = PasswordModeEnter;

switch (mode) {
  case PasswordModeEnter:
    break;

  ...

  case PasswordModeDisabled:
    break;

  default:
    break;
}
于 2013-10-31T13:13:47.623 回答