我正在开发一个Objective-C程序,我正在通过网络获取位域,并且需要根据这些位设置布尔变量.
目前我将位域表示为int's,然后使用位移,类似于此(所有自身属性都是BOOL):
typedef enum {
deleteFlagIndex = 0,
uploadFlagIndex = 1,
moveFlagIndex = 2,
renameFlagIndex = 3
} PrivilegeFlagIndex;
int userFlag = 5; //for example
// this would be YES
self.delete = ((userFlag & (1 << deleteFlagIndex)) == (1 << deleteFlagIndex));
// this would be NO
self.upload = ((userFlag & (1 << uploadFlagIndex)) == (1 << uploadFlagIndex));
Run Code Online (Sandbox Code Playgroud)
这是有效的(据我所知),但我想知道 - 是否有一种更有效的简洁方法来编写所有使用花哨技巧/黑客的位?我问,因为我会为很多标志(超过30个)做这个.
我意识到我也可以使用这种方法:
self.move = ((userFlag & (1 << moveFlagIndex)) > 0)
Run Code Online (Sandbox Code Playgroud)
...这确实减少了打字的数量,但我不知道是否有充分的理由不这样做.
编辑:修改为简洁而不是有效 - 我并不担心执行性能,而是以聪明的方式做这件事的技巧和最佳实践.