【发布时间】:2013-02-16 19:40:51
【问题描述】:
想知道是否有办法简写这些条件。我正在处理数据包,有时条件会变得有点笨拙。这是一个基本示例:
我写:
if (message->messageType != kMessageTypeCutCardsArray && message->messageType != kMessageTypeQuit) {
MessageInt message;
message.message.messageType = kMessageTypeReceivedData;
NSData *packet = [NSData dataWithBytes:&message length:sizeof(message)];
[_game sendData:packet];
}
我宁愿写:
if (message->messageType != (kMessageTypeCutCardsArray || kMessageTypeQuit)) {
MessageInt message;
message.message.messageType = kMessageTypeReceivedData;
NSData *packet = [NSData dataWithBytes:&message length:sizeof(message)];
[_game sendData:packet];
}
【问题讨论】:
-
对不起,我刚刚对你的回答评论了“不正确”,但我觉得我读得太快了。 if
kMessageTypeCutCardsArray是正确的,另一个是位标志 - 单管道是二进制 OR 并且 将 组合两个(互斥)标志,以便您可以同时检查它们。但是,在检查这样的掩码时,您通常应该使用&而不是==。 -
您能说明您要比较的事物的类型吗?
-
您可以将值复制到具有较短名称的变量中以简化,即
sometype val = mess->of.an[expression]->goes.here; if((val == this) || (val == that)) {...(无论如何,您的邻居编译器可能会在您背后自己这样做) -
乔希,我认为你是对的,我错了。我正在评估 typedef 结构中定义的消息类型,如下所示: typedef enum { ... } MessageType; typedef struct { MessageType messageType; } 消息;
标签: objective-c cocoa