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