我的术语不是很好..这是我的代码:
enum {
LoggerLogNone = 0,
LoggerLogMessages = 1 << 0,
LoggerLogErrors = 1 << 1
};
typedef NSUInteger LoggerLogs;
我想做的是在确定是否应记录时,在我的逻辑中使用LoggerLogs
。因此,在我的log:(NSString *)message
中,我希望它仅在用户设置LoggerLogMessages
时才能记录,而对于logError:(NSString *)error
我希望它仅在用户设置LoggerLogErrors
时才能记录。
我知道如何设置它们:
LoggerLogs logs = LoggerLogMessages | LoggerLogErrors;
我不知道该怎么做,检查是否选中了LoggerLogMessages
或LoggerLogErrors
。
任何帮助将不胜感激。我确信在某处可以回答这个问题,但由于我不知道要使用的术语,因此很难搜索&gt; _&lt;
答案 0 :(得分:2)
- (void)log:(NSString *)message {
if (logs & LoggerLogMessages) {
NSLog(@"message: %@", message);
}
}
- (void)logError:(NSString *)error {
if (logs & LoggerLogErrors) {
NSLog(@"error: %@", error);
}
}
<<
和&
都称为按位运算符。如果你谷歌bitwise operators C
,你会发现很多解释。
答案 1 :(得分:1)
您正在寻找按位AND运算符&
。
if (logs & LoggerLogMessages) {
...
}
if (logs & LoggerLogErrors) {
...
}
答案 2 :(得分:1)
要检查是否设置了标志,只需执行按位AND (&
),并使用存储标志的变量并检查标志,结果将是如果该位序列包含在变量中,则检查该标志:
if ( (logs & LoggerLogMessages) == LoggerLogMessages ) {
// LoggerLogMessages is set
}
或者您可能只是:
if (logs & LoggerLogMessages) { ... }
答案 3 :(得分:0)
如果要检查是否应记录消息,请使用按位AND
if(logFlags & LoggerLogMessages)
//log the message
同样,如果要记录错误消息
if(logFlags & LoggerLogErrors)
//log the message
此外,这些术语的常用术语是bit fields或flags
答案 4 :(得分:0)
我认为你想要一个逻辑或按位的,比如:
if ((flag & LoggerLogMessages) || (flag & LoggerLogErrors))
另一件需要注意的事情是,你关心的两个州是唯一的两个,两者都是&gt; 0,所以
if (flag)
也会奏效。