如何enum 实现接口 enum 的多选

通过SQL Server的位运算功能巧妙解决多选查询 - taewind - 博客园
&&&&项目中很多业务对象的数据表中都具有Status字段,有人使用int型保存Status,有人使用varchar型。
无论使用int还是varchar,对于Status的多选查询都是不易应对的。举例,常规思维下对CustomerStatus的Enum设置如下:
&& &[Serializable]
&&& &&&public enum CustomerStatus
&&&&&&& New = 0,
&&&&&&& Active = 1,
&&&&&&& Overdue = 2,
&&&&&&& Suspended = 3,
&&&&&&& Closing = 4,
&&&&&&& Closed = 5
在数据库中以int形式存储了Status值。
如果我在页面中想一次搜索状态为Active,Overdue和Suspended状态的Customer,该怎么办?程序是不是得把这三个状态值
拼成字符串传递给SQL去处理?虽然能实现,但是相当低效。
&&&&&&& 现在给出一个标准解决方案:
&&&&&&& (1). 所有可能被用作搜索条件的枚举都应按如下位运算方式定义。
&&&&&&& public enum CustomerStatus
&&&&&&& New = 1,
&&&&&&& Active = 1&&1,
&&&&&&& Overdue = 1&&2,
&&&&&&& Suspended = 1&&3,
&&&&&&& Closing = 1&&4,
&&&&&&& Closed = 1&&5
&&&&&&& (2). 在数据库设计时,Status的字段必须为int型。
&&&&&&& 这样当我们做多选查询时@Status的Value= CustomerStatus.Active | CustomerStatus. Overdue| CustomerStatus. Suspended
&&&&&&&&(3). 查询语句如下:
&&&&&&Select *
&& &From Customer
Where [Status] & @Status = [Status]
如果@Status可为null时,
From Customer
Where ( @Status is null Or [Status] & @Status = [Status])
用这样一条简单的语句,就可以获取到所有符合@Status要求的数据行。怎么实现下拉框的多选功能
来源:博客园
【ajax怎么实现下拉框的多选功能 并且下拉框中的选项是来自数据库中的数据】
&ul&&li&&/li&&/ul&实现
USERCONTROL
1 &%@ Control Language="C#" AutoEventWireup="true" CodeFile="DropDownSelect.ascx.cs"
Inherits="DropDownSelect" %&
&style type="text/css"&
5 .x-combo-list-item {
padding:2px;
border:1px solid;
white-space: nowrap;
overflow:hidden; 10
text-overflow: ellipsis; 11
border-color:#fff; 12
cursor:pointer; 13
} 14 .dropList-item 15 { 16
padding:2px; 17
border:1px solid; 18
white-space: nowrap; 19
overflow:hidden; 20
text-overflow: ellipsis; 21
border-color:#fff; 22
cursor:pointer; 23 } 24 .x-shadow { 25
display: none; 26
position: absolute; 27
overflow: hidden; 28
left:0; 29
top:0; 30 } 31 .x-shadow * { 32
overflow: hidden; 33 } 34 .x-shadow * { 35
padding: 0; 36
border: 0; 37
margin: 0; 38
clear: none; 39
zoom: 1; 40 } 41 .x-shadow .xstc, .x-shadow .xsbc { 42
height: 6px; 43
float: left; 44 } 45 .x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr { 46
width: 6px; 47
height: 6px; 48
float: left; 49 } 50
52 .x-shadow .xsc { 53
width: 100%; 54 } 55
56 .x-shadow .xsml, .x-shadow .xsmr { 57
width: 6px; 58
float: left; 59
height: 100%; 60 } 61
62 .x-shadow .xsmc { 63
float: left; 64
height: 100%; 65
background: transparent; 66 } 67
68 .x-shadow .xst, .x-shadow .xsb { 69
height: 6px; 70
overflow: hidden; 71
width: 100%; 72 } 73
74 .x-shadow .xsml { 75
background: transparent repeat-y 0 0; 76 } 77
78 .x-shadow .xsmr { 79
background: transparent repeat-y -6px 0; 80 } 81
82 .x-shadow .xstl { 83
background: transparent no-repeat 0 0; 84 } 85
86 .x-shadow .xstc { 87
background: transparent repeat-x 0 -30px; 88 } 89
90 .x-shadow .xstr { 91
background: transparent repeat-x 0 -18px; 92 } 93
94 .x-shadow .xsbl { 95
background: transparent no-repeat 0 -12px; 96 } 97
98 .x-shadow .xsbc { 99
background: transparent repeat-x 0 -36px;100 }101 102 .x-shadow .xsbr {103
background: transparent repeat-x 0 -6px;104 }105 .x-shadow .xsmc {106
background-image: url(images/shadow-c.png);107 }108 .x-shadow .xsml, .x-shadow .xsmr {109
background-image: url(images/shadow-lr.png);110 }111 .x-shadow .xstl, .x-shadow .xstc,
.x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbc, .x-shadow .xsbr{112
background-image: url(images/shadow.png);113 }114 .checkbox115 {116
background-image: url(images/unchecked.gif) ;
background-repeat:no-repeat; border:1px solid green;
border:0px;
background-position:top 0;117 }118
&/style&119 120 &script language="javascript" type="text/javascript"&121
var &%=drowdownCheckList.ClientID %&isShow='N';122
$(document.body).ready(function()123
&%=drowdownCheckList.ClientID %&PageInint();125
$(document).click(function(event)126
&%=drowdownCheckList.ClientID %&PageClick(event);128
$("#&%=drowdownCheckList.ClientID%&").find("img").click(function()130
if (&%=drowdownCheckList.ClientID %&isShow=='N')132
$("#&%=checkItemList.ClientID%&").show();134
$("#&%=shadow.ClientID %&").show();135
&%=drowdownCheckList.ClientID %&isShow='Y';136
$("#&%=checkItemList.ClientID%&").hide();140
$("#&%=shadow.ClientID %&").hide();141
&%=drowdownCheckList.ClientID %&isShow='N';142
$("#&%=showSELECTVAL.ClientID%&").click(function()145
if (&%=drowdownCheckList.ClientID %&isShow=='N')147
$("#&%=checkItemList.ClientID%&").show();149
$("#&%=shadow.ClientID %&").show();150
&%=drowdownCheckList.ClientID %&isShow='Y';151
$("#&%=checkItemList.ClientID%&").hide();155
$("#&%=shadow.ClientID %&").hide();156
&%=drowdownCheckList.ClientID %&isShow='N';157
$("#&%=drowdownCheckList.ClientID %&").find("div.dropList-item").hover(function()160
$(this).css({"background-color":"#dfe8f6",border:"1px dashed #7EADD9"});162
},function()163
$(this).css({"background-color":"#ffffff",border:"1px solid #fff"});165
$("#&%=drowdownCheckList.ClientID %&").find("div.dropList-item").find("input[type=checkbox]").click(function()167
var newVal=null;170
var labVal=null;171
var ckIdval=null;172
$("#&%=drowdownCheckList.ClientID %&").find("div.dropList-item").find("input[type=checkbox][checked]").each(function()173
var val=$(this).val();175
var id=$(this).attr("id");176
var lab=$.trim($("#&%=drowdownCheckList.ClientID %&").find("div.dropList-item").find("label[for="+id+"]").html());177
if(newVal==null)178
newVal="'"+val+"'";180
labVal=181
ckIdval=182
newVal="'"+val+"',"+newV186
labVal=lab+","+labV187
ckIdval=id+","+ckI188
if(newVal!=null)192
$("#&%=hiddenval.ClientID%&").val(newVal);194
$("#&%=showSELECTVAL.ClientID %&").val(labVal);195
$("#&%=hiddenchid.ClientID %&").val(ckIdval);196
$("#&%=hiddenval.ClientID%&").val("");200
$("#&%=showSELECTVAL.ClientID %&").val("");201
$("#&%=hiddenchid.ClientID %&").val("");202
function &%=drowdownCheckList.ClientID %&PageInint()207
var val=$("#&%=hiddenchid.ClientID %&").val();209
if(val!="")210
var properties= val.split(",");212
for(i=0;i&properties.i++)213
var id= properties[i];215
$("#"+id).attr("checked","checked");216
function &%=drowdownCheckList.ClientID %&PageClick(event)221
var mLeft=$("#&%=drowdownCheckList.ClientID%&").offset().223
var mTop=$("#&%=drowdownCheckList.ClientID%&").offset().224
var mWidth=$("#&%=drowdownCheckList.ClientID%&").width();225
var mHeight=$("#&%=drowdownCheckList.ClientID%&").attr("ahei");226
mHeight=parseFloat(mHeight);227
var bodyScrollTop= document.documentElement.scrollTop || document.body.scrollT228
var bodyScrollLeft=document.documentElement.scrollLeft || document.body.scrollL229
bodyScrollTop=event.clientY+bodyScrollT230
bodyScrollLeft=event.clientX+bodyScrollL231
var lLeft=mLeft+mW232
var lTop=mTop+mHeight+20;233
if(!(bodyScrollTop&=mTop && bodyScrollTop&=lTop && bodyScrollLeft&=mLeft && bodyScrollLeft&=lLeft) && &%=drowdownCheckList.ClientID %&isShow=='Y')234
$("#&%=checkItemList.ClientID%&").hide();236
$("#&%=shadow.ClientID %&").hide();237
&%=drowdownCheckList.ClientID %&isShow='N';238
}240 241 242 &/script&243 244 &div id='drowdownCheckList' runat="server" style="margin: 0 padding: 0 white-space:245
word-spacing:"&246
&input type="text" id="showSELECTVAL" runat="server" style="background-color: #247
border: 1px solid #7eadd9; white-space: pre- line-height: 18 vertical-align:248
height: 17 margin-bottom: 1 padding-top: 2 background-image: url(images/text-bg.gif);249
padding-bottom: 0 padding-left: 3 padding-right: 3 background-repeat: repeat-x;250
font-family: A" /&&img style="white-space: pre- width: 17 position: border-bottom: 1px solid #7eadd9;251
background-position: -51px 0 cursor: height: 20 top: 0 background-image: url(images/trigger.gif);"252
src="Images/s.gif" alt='' /&253
&input type="hidden" id="hiddenval" runat="server" style="display: none" /&254
&input type="hidden" id="hiddenchid" runat="server" style="display: none" /&255
&div style="z-index: 10999; display: margin-top: 26 display: margin-left: -4"256
class="x-shadow" runat="server" id="shadow"&257
&div class="xst"&258
&div class="xstl"&259
&div style="width: &%=(Width-12)%&" class="xstc"&261
&div class="xstr"&263
&div style="height: &%=Height-12%&" class="xsc"&266
&div class="xsml"&267
&div style="width: &%=(Width-12)%&" class="xsmc"&269
&div class="xsmr"&271
&div class="xsb"&274
&div class="xsbl"&275
&div style="width: &%=(Width-12)%&" class="xsbc"&277
&div class="xsbr"&279
&div style="z-index: 11000; margin-left: 0 font-size: 12 border: 1px solid #98c0f4;283
font-family: A display: position: top: 22 left: 0"284
id="checkItemList" runat="server"&285
&div style="overflow: background:" class="x-combo-list-inner" runat="server"286
id="ck_content"&287
&div class="dropList-item"&288
&input type="checkbox" value="1" id="drowdownCheckList_ck1" /&289
&label for="drowdownCheckList_ck1"&290
Test1&/label&&/div&291
&div class="dropList-item "&292
&input type="checkbox" value="2" id="drowdownCheckList_ck2" /&293
&label for="drowdownCheckList_ck2"&294
Test2&/label&&/div&295
&div class="dropList-item"&296
&input type="checkbox" value="3" id="drowdownCheckList_ck3" /&&label for="drowdownCheckList_ck3"&297
Test3&/label&&/div&298
&div class="dropList-item"&299
&input type="checkbox" value="4" id="drowdownCheckList_ck4" /&&label for="drowdownCheckList_ck4"&300
Test4&/label&&/div&301
&div class="dropList-item"&302
&input type="checkbox" value="5" id="drowdownCheckList_ck5" /&&label for="drowdownCheckList_ck5"&303
Test5&/label&&/div&304
&div class="dropList-item"&305
&input type="checkbox" value="6" id="drowdownCheckList_ck6" /&&label for="drowdownCheckList_ck6"&306
Test6&/label&&/div&307
&div class="dropList-item"&308
&input type="checkbox" value="7" id="drowdownCheckList_ck7" /&&label for="drowdownCheckList_ck7"&309
Test7&/label&&/div&310
&/div&312 &/div&313 
1 public partial class DropDownSelect : System.Web.UI.UserControl
protected void Page_Load(object sender, EventArgs e)
this.Page.ClientScript.RegisterClientScriptInclude("JQUERY", "JS/jquery-1.3.2.min.js");
if (!IsPostBack)
Response.Write("&!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"&");
drowdownCheckList.Style.Add("width", Width.ToString() + "px"); 10
drowdownCheckList.Style.Add("position", position.ToString()); 11
drowdownCheckList.Style.Add("left", Left.ToString() + "px"); 12
drowdownCheckList.Style.Add("top", Top.ToString() + "px"); 13
drowdownCheckList.Attributes.Add("ahei", Height.ToString()); 14
showSELECTVAL.Style.Add("width", (Width - 33).ToString() + "px"); 16
shadow.Style.Add("width", Width.ToString() + "px"); 17
shadow.Style.Add("height", Height.ToString() + "px"); 18
checkItemList.Style.Add("Width", (Width - 10).ToString() + "px"); 19
checkItemList.Style.Add("height", (Height - 2).ToString() + "px"); 20
ck_content.Style.Add("height", (Height - 2).ToString() + "px"); 21
ck_content.Style.Add("width", (Width - 10).ToString() + "px"); 22
if (Items.Count & 0) 23
int i = 0; 25
ck_content.InnerHtml = ""; 26
foreach (ListItem li in Items) 27
ck_content.InnerHtml = ck_content.InnerHtml + "
&div class=\"dropList-item\"& &input type=\"checkbox\" value=\"" + li.Value + "\" id=\"" + this.ClientID + "drowdownCheckList_ck" + i.ToString() + "\" /&&label for=\"" + this.ClientID + "drowdownCheckList_ck" + i.ToString() + "\"& " + li.Text + "&/label&&/div&"; 30
private ListItemCollection listCollection = new ListItemCollection(); 35
/// &summary& 36
/// 內容值 38
/// &/summary& 39
public ListItemCollection Items 40
get { return listC } 42
set { listCollection = } 43
/// &summary& 45
/// 選擇值 46
/// &/summary& 47
public string SelectValue 48
get { return hiddenval.V } 50
private int _width = 110; 52
private int _height = 200; 53
private Position _position = Position.R 54
private int _top = 0; 55
private int _left = 0; 56
/// &summary& 57
/// 寬度 58
/// &/summary& 59
public int Width 60
get { return _ } 62
set { _width = } 63
/// &summary& 65
/// 高度 66
/// &/summary& 67
public int Height 68
get { return _ } 70
set { _height = } 71
/// &summary& 73
/// 位置 74
/// &/summary& 75
public Position position 76
get { return _ } 78
set { _position = } 79
/// &summary& 81
/// Top 82
/// &/summary& 83
public int Top 84
get { return _ } 86
set { _top = } 87
/// &summary& 89
/// Left 90
/// &/summary& 91
public int Left 92
get { return _ } 94
set { _left = } 95
public enum Position 97
Relative, 99
Absolute,100
}102 }
usage
&ul:DropDownSelect ID="DropDownSelect1" runat="server" Width="200" position="Absolute"
Left="200" Top="100" /&
DropDownSelect1.Items.Add(new ListItem("AAAAAAAAA", "AA")); 2
DropDownSelect1.Items.Add(new ListItem("BBBB", "BB")); 3
DropDownSelect1.Items.Add(new ListItem("DD", "CC")); 4
DropDownSelect1.Items.Add(new ListItem("AAAADSAD", "DD")); 5
DropDownSelect1.Items.Add(new ListItem("BASDSAFS", "DD")); 6
DropDownSelect1.Items.Add(new ListItem("WRWSSA", "DD")); 7
DropDownSelect1.Items.Add(new ListItem("WRWSSA", "DD")); 8
DropDownSelect1.Items.Add(new ListItem("WRWSSA", "DD")); 9
DropDownSelect1.Items.Add(new ListItem("AAAAAAAAA", "AA"));10
DropDownSelect1.Items.Add(new ListItem("BBBB", "BB"));11
DropDownSelect1.Items.Add(new ListItem("DD", "CC"));12
DropDownSelect1.Items.Add(new ListItem("AAAADSAD", "DD"));13
DropDownSelect1.Items.Add(new ListItem("BASDSAFS", "DD"));14
DropDownSelect1.Items.Add(new ListItem("WRWSSA", "DD"));15
DropDownSelect1.Items.Add(new ListItem("WRWSSA", "DD"));16
DropDownSelect1.Items.Add(new ListItem("WRWSSA", "DD"));17
TXT_VALUE.Text = DropDownSelect1.SelectV
无心之柳.NET:
jQuery MultiSelect是一个可配置的jQuery插件。它将普通的列表框表单控件转换成带有CheckBox的下拉列表控件。用这个吧,简单方便,还好用
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动(window.slotbydup=window.slotbydup || []).push({
id: '3284507',
container: s,
size: '0,0',
display: 'inlay-fix'
c#多选枚举怎么判断
C# 中枚举类型是一种值类型,目前(vs2012)还不能用于泛型。
此类型最多的用处是标识一组相同类型的状态量或常量,比如:
public enum ConnectionState
Closed = 0,
Connecting = 2,
Executing = 4,
Fetching = 8,
Broken = 16,
[ComVisible(true)]
[Serializable]
public enum FileAttributes
ReadOnly = 1,
Hidden = 2,
System = 4,
Directory = 16,
Archive = 32,
Device = 64,
Normal = 128,
Temporary = 256,
SparseFile = 512,
ReparsePoint = 1024,
Compressed = 2048,
Offline = 4096,
NotContentIndexed = 8192,
Encrypted = 16384,
[ComVisible(false)] IntegrityStream = 32768,
[ComVisible(false)] NoScrubData = 131072,
在使用中,平时使用频率最多的是:使用switch case 语句来判断枚举中的一个值,比如:
enum ActionStep
/// &summary&
/// 第一步:打开主页
/// &/summary&
/// &summary&
/// 第二步:查找输入框与提交按钮,输入关键字后提交
/// &/summary&
FindAndQuery,
/// &summary&
/// 第三步:查找指定连接,找到后导航到它
/// &/summary&
/// &summary&
/// 第四步:等待15秒后关闭
/// &/summary&
WaittingForClose,
switch (action.Step)
case ActionStep.Home:
Navigate(task.Home);
case ActionStep.FindAndQuery:
InputAndSubmit(task);
case ActionStep.Search:
SearchTarget(task);
case ActionStep.WaittingForClose:
WaitForClose(task);
然而,我们有时候也需要多状态的情况,比如:文件属性 FileAttributes。
那么,如何来操作呢?
正常的思路是声明一个变量,在需要的时候进行 与 或 非 操作。(不是还有hasFlag嘛?......),比如:C# Enum设计和使用的相关技巧 中的示例
例如定义了权限Enum Permission:
public enum Permission{
Select = 1,
Delete = 4,
All = Select | Edit | Delete | View
可以采用这个函数进行计算:
public static Permission ClearFlag(Permission value, Permission flag)
value = value & (Permission.All^ flag);
使用起来应该很方便,但是如果遇到,像下面的情况
public enum AuthorState
BlogListDownloading = 1,
BlogListParsing = 2,
BlogDownloading = 4,
BlogParsing = 8,
BlogWritting = 16,
MetaDownloading = 32,
MetaParsing = 64,
MetaWritting = 128,
MetasParsedDone = 2048,//所的的元素解析全部完成
DownloadList = 256,
CheckUpdate = 512,
NeedUpdate = 1024//需要更新
/// &summary&
/// 状态辅助类
/// &/summary&
public class EnumHelper
private AuthorState _
/// &summary&
/// 添加一个状态
/// &/summary&
/// &param name=&state&&&/param&
public void In(AuthorState state)
if (!Include(state))
/// &summary&
/// 删除一个状态
/// &/summary&
/// &param name=&state&&&/param&
public void Out(AuthorState state)
if(!Include(state))
//_state ^=
/// &summary&
/// 判断一个状态是否在其中
/// &/summary&
/// &param name=&state&&&/param&
/// &returns&&/returns&
public bool Include(AuthorState state)
return (_state & state) ==
&span style=&color: #993366;&&&strong& State.In(AuthorState.DownloadList);&/strong&&/span&
_download.DownloadBlogList(url);
&strong&&span style=&color: #993366;&&State.Out(AuthorState.DownloadList);
&/span&&/strong&
即,添加了一个状态,在之后的操作中会去除这个状态。
然而,我在写出了示例五之后总感觉这样做代码量增加太多了,虽然有智能提示。很是怀想delphi下的 In 操作:
procedure TForm1.Edit1KeyPress(Sender: TO var..Key: Char);
  if not(key in['0'..'9',#8])then
    key:=#0;
    MessageBeep(1); //B 调用系统声音也行!
C#中的In是不会让你这么用的,那么,要怎么办?扩展!扩展枚举,增加一些方法
google了一下,找到了 如何:为枚举创建新方法(C# 编程指南)
下面是我修改之后的代码
public enum MyEnum
Zero =1 , One = 2, Two = 4, Three =8
public static class Extensions
public static MyEnum Host = MyEnum.O
public static bool Contained(this MyEnum value)
return (Host & value) ==
public static void Add(this MyEnum value)
if (value.Contained())
public static void Remove(this MyEnum value)
if (value.Contained())
public class TestCls
private MyEnum _initValue = MyEnum.O
public void Test(MyEnum value)
Extensions.Host = _initV//控制变量
value.Contained();
value.Add();
value.Remove();
那么,好吧,你现在会用了。
MyEnum.One.Add();
MyEnum.One.Remove();
标签(Tag):
------分隔线----------------------------
------分隔线----------------------------本帖子已过去太久远了,不再提供回复功能。使用位运算设计可复选的枚举
一、枚举使用的一个小例子
在软件开发中,枚举是我们会经常会用到的一种编程方式,通过枚举,可以使我们的代码更具可读性与统一性。通常情况下,我们会通过typedef来定义一种枚举的类型来使用。
使用位运算设计可复选的枚举
一、枚举使用的一个小例子
在软件开发中,枚举是我们会经常会用到的一种编程方式,通过枚举,可以使我们的代码更具可读性与统一性。通常情况下,我们会通过typedef来定义一种枚举的类型来使用。例如:
typedef enum {
我们可以在函数的参数中来使用它:
-(void)testEunm:(myEnum)para{
switch (para) {
case para1:
NSLog(@"para%d",1);
case para2:
NSLog(@"para%d",2);
case para3:
NSLog(@"para%d",3);
我们在调用调用这样的一个函数的时候,通过传入一个枚举类型,可以分流执行我们想要的操作。
二、枚举到底是个什么东西
枚举并不是一种奇怪的类型,起实质是整型的另一个名字,如果没有附加的操作,枚举中的第一个参数默认就是整型0,之后依次递加,当然,我们也可以认为的控制这个数值,例如:
typedef enum {
para3=1000
可以这么理解,我在传参的时候,传7和para1是完全一样的效果,但是后者明显更具可读性。
三、可复选的枚举属性
如果熟悉iOS的开发,你会发现系统很多的枚举类型都是可以复选的,例如视图的拉伸模式,json的解析属性等等,这不仅使代码可读性优化,也更加简便了一些选项设置的代码。当我们理解了枚举就是整型之后,会发现其实很容易做到这一点:
首先,我们给定义的枚举参数设置一个有规律的值:
typedef enum {
para1=1&&1,
para2=1&&2,
para3=1&&3
&&符号是位运算中的左移运算符,将1进行1位,2位,3位的左移后,我们得到的二进制数如下:
现在我们有了一个大致思路了,用当前位的0和1来标识当前属性是否设置,如果有几个属性的复选,只需要将我们的相应枚举进行或的位运算,在取的时候检测相应位是否为1即可,这正是与运算可以做到的:
-(void)testEunm:(myEnum)para{
if (para&1&&1) {
NSLog(@"para1");
if (para&1&&2) {
NSLog(@"para2");
if (para&1&&3) {
NSLog(@"para3");
我们通过如下方式调用:
[self testEunm:para2|para3];
打印结果如下:
这种位运算的枚举在官方sdk中被广泛使用,能够有效的简化代码和提高代码的可读性。
用云栖社区APP,舒服~
【云栖快讯】支撑千亿营收,阿里如何做研发?淘宝如何做敏捷实践?如何面对开发中的“黑天鹅”事件?6月29日首届阿里研发效能嘉年华,独家直播,赶紧预约吧!&&
阿里云移动APP解决方案,助力开发者轻松应对移动app中随时可能出现的用户数量的爆发式增长、复杂的移动安全挑战等...
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...
2017杭州云栖大会火热抢票
Loading...}

我要回帖

更多关于 enum 实现单例 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信