查看swift和OC的UIControlState寫法,是不同的:
Swift寫法:
public struct UIControlState : OptionSet {
public init(rawValue: UInt)
public static var normal: UIControlState { get }
public static var highlighted: UIControlState { get }
...
}
OC寫法:
typedef NS_OPTIONS(NSUInteger, UIControlState) {
UIControlStateNormal? ? ? = 0,
UIControlStateHighlighted = 1 << 0,
...
};
OC寫法我們調(diào)用就是 (UIControlStateNormal | UIControlStateHighlighted),Swift調(diào)用是 ([.normal,.highlighted])脖阵;OC好理解,位或運算郁油;但是Swift這是什么鬼呢?
查找資料后攀痊,原來還是很多東西在這里的的桐腌。
OptionSet的聲明: public protocol OptionSet : SetAlgebra, RawRepresentable;這是一份協(xié)議苟径,繼承自SetAlgebra, RawRepresentable協(xié)議案站;實現(xiàn)了OptionSet協(xié)議(只有一個方法:public init(rawValue: Self.RawValue))就可以對成員變量進行比較、類似[.normal,.highlighted]這樣的列舉棘街,交并集等蟆盐。雖然只實現(xiàn)了一個初始化方法,但是OptionSet的Extension已經(jīng)幫我們實現(xiàn)了遭殉。
這樣一理順就好理解了石挂。
參考:(http://www.reibang.com/p/9a1fcfb7e3ee)