說起位移枚舉,首先了解兩個(gè)運(yùn)算符“&”和“|”采转,不同于“||” “&&”
按位與 & :顧名思義要按照對(duì)應(yīng)所在的位置進(jìn)行與運(yùn)算聪廉,只有1&1才是1,其他都是0故慈。
按位或 | : 1&1 = 1 板熊、1&0 = 1、0&0 = 0
位移枚舉的值可以是枚舉中任意的“|”的值
例如:
MyStyle style = typeOne | typeTwo | typeThree | typeFour
它的值就為0b1111 也就是十進(jìn)制的15
下面上代碼
typedef NS_OPTIONS(NSUInteger, MyStyle) {
typeOne = 1 << 0,
typeTwo = 1 << 1,
typeThree = 1 << 2,
typeFour = 1 << 3,
};
//將一個(gè)二進(jìn)制數(shù)字向左移位
typeOne 0b01
typeTwo 0b10
typeThree 0b100
typeFoure 0b1000
由上可知相同枚舉&的時(shí)候值與原來相同
0b10 & 0b10 還是等于 0b10
如果兩個(gè)不相同枚舉&的時(shí)候等于0
ob10 & ob01 = 0
如果要判斷是否包含這個(gè)枚舉察绷,則判斷&后不為0
(typeOne | typeTwo | typeThree | typeFour) & 0b01 = 0b01
(typeTwo | typeThree | typeFour) & 0b01 = 0b01 = 0b00
下面看下swift中的寫法
enum Movement3: UInt {
case left = 0b01
case right = 0b10
case top = 0b100
case bottom = 0b1000
}
enum Movement4 {
case my(name:String,old:Int)
}
//可以通過rawValue將它的值取出來干签。
let test1 = Movement1.left.rawValue
//同樣可以通過rawValue來創(chuàng)建一個(gè)枚舉
let test2 = Movement1.init(rawValue: 0)
let test3 = Movement4.my(name: "name", old: 1)
//由此判斷
if (Movement3.left.rawValue | Movement3.right.rawValue) & 0b01 {
}
暫未發(fā)現(xiàn)有其他好的寫法,如有大神請(qǐng)多指教哦拆撼!