下面來簡單的解釋一下OC里枚舉的兩種類型.NS_ENUM
和NS_OPTIONS
本質上是一樣的都是枚舉.我舉個例子.
應該可以看出一些苗頭.
NS_ENUM
這種聲明出來的東西大部分是單選. NS_OPTIONS
聲明出來的大部分是多選.
像UIViewAnimationTransition這種在用的時候肯定是只能選一種效果,你要么從左翻到右,要么從右翻到左,你做動畫的時候總不能同一時刻讓他同時從左到右,又從右到左翻,對吧.
而UIViewAutosizing就不一樣了.我要是讓子view的寬高和父View一樣,那么autoviewsizing的選項肯定是類似于這種.UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight
沒錯吧,意思就是兩個options的我都得選才行.
那么如果有個場景讓我判斷當前的view的Autoresizing有哪幾個.我怎么判斷呢?
很簡單.用按位與操作就行了.假設 autoResizings = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleRightMargin;
我們判斷autoResizings里是否有UIViewAutoresizingFlexibleLeftMargin的時候只需要if(autoResizings & UIViewAutoresizingFlexibleLeftMargin)是否為true就可以了.用二進制表示的話(這里不用care NSUInteger到底是幾位的.就表示這么個意思)UIViewAutoresizingFlexibleLeftMargin = 00000001UIViewAutoresizingFlexibleWidth = 00000010UIViewAutoresizingFlexibleRightMargin = 00000100
所以根據上面的表達式,我們的autoResizings = 00000111.那么執行按位與操作是這樣的.
00000111&00000001 結果就是00000001,為true.表示含有這個選項.新聞熱點
疑難解答