Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 正在尝试将整数与枚举一起使用(<;<;)_Iphone_Objective C_C_Ios - Fatal编程技术网

Iphone 正在尝试将整数与枚举一起使用(<;<;)

Iphone 正在尝试将整数与枚举一起使用(<;<;),iphone,objective-c,c,ios,Iphone,Objective C,C,Ios,我对术语不是很在行。。以下是我的代码: enum { LoggerLogNone = 0, LoggerLogMessages = 1 << 0, LoggerLogErrors = 1 << 1 }; typedef NSUInteger LoggerLogs; 我不知道如何做的是检查是否选中了LoggerLogMessages或LoggerLogErrors。 任何帮助都将不胜感激。我肯定在这里的某个地方有答案,

我对术语不是很在行。。以下是我的代码:

enum {
    LoggerLogNone        = 0,
    LoggerLogMessages    = 1 << 0,
    LoggerLogErrors      = 1 << 1
};
typedef NSUInteger LoggerLogs;
我不知道如何做的是检查是否选中了
LoggerLogMessages
LoggerLogErrors
。 任何帮助都将不胜感激。我肯定在这里的某个地方有答案,但由于我不知道要使用的术语,因此很难搜索>_ 两者都


如果要检查是否应该记录消息,请使用按位和

if(logFlags & LoggerLogMessages)
    //log the message
类似地,如果要记录错误消息

if(logFlags & LoggerLogErrors)
    //log the message

此外,它们的常用术语是或如果要检查是否应该记录消息,请使用按位和

if(logFlags & LoggerLogMessages)
    //log the message
类似地,如果要记录错误消息

if(logFlags & LoggerLogErrors)
    //log the message

此外,它们的常用术语是or,您正在寻找的是按位AND运算符,
&

if (logs & LoggerLogMessages) {
  ...
}

if (logs & LoggerLogErrors) {
  ...
}

您正在寻找按位AND运算符,
&

if (logs & LoggerLogMessages) {
  ...
}

if (logs & LoggerLogErrors) {
  ...
}

要检查是否设置了标志,只需对存储标志的变量执行按位AND(
&
)即可,如果该位序列包含在变量中,则结果将是所检查的标志:

if ( (logs & LoggerLogMessages) == LoggerLogMessages ) {
    // LoggerLogMessages is set
}
或者你可能只是有:

if (logs & LoggerLogMessages) { ... }

要检查是否设置了标志,只需对存储标志的变量执行按位AND(
&
)即可,如果该位序列包含在变量中,则结果将是所检查的标志:

if ( (logs & LoggerLogMessages) == LoggerLogMessages ) {
    // LoggerLogMessages is set
}
或者你可能只是有:

if (logs & LoggerLogMessages) { ... }

我认为您需要按位AND的逻辑or,如:

if ((flag & LoggerLogMessages) || (flag & LoggerLogErrors))
另一件需要了解的事情是,您关心的两个状态是唯一的两个,并且都>0,所以

if (flag)

也能用。

我想你需要一个逻辑or的按位AND,比如:

if ((flag & LoggerLogMessages) || (flag & LoggerLogErrors))
另一件需要了解的事情是,您关心的两个状态是唯一的两个,并且都>0,所以

if (flag)

也会起作用。

typedef
不必在
enum
之前执行。请在编译器中尝试。如果他想像打字一样使用它,它需要一个typedef。@danh:不,OP正在做。@Josh:我明白了。谢谢你的提示。我回答了他问题的错误部分。我相应地编辑了回复。
typedef
不必在
enum
前面。请在编译器中尝试。如果他想像打字一样使用它,它需要一个typedef。@danh:不,OP正在做。@Josh:我明白了。谢谢你的提示。我回答了他问题的错误部分。我相应地编辑了回复。非常感谢:-D它有效。我早该知道。。说到术语,我的记忆力是有史以来最差的。非常感谢:-D它很管用。我早该知道。。说到术语,我的记忆力是有史以来最差的。