[英]Accessing NS_OPTIONS in swift option unavailable
我在Objective-C .h文件中定義了NS_OPTIONS:
typedef NS_OPTIONS (NSInteger, Options){
OptionsOne,
OptionsTwo,
OptionsThree
};
現在,當從Swift訪問時:
public func myFunc() -> Options {
return [.one, .two]
}
我收到此錯誤:
“ one”不可用:使用[]構造一個空選項集。
但是我沒有得到.two或.three的錯誤。 僅出現在第一個選項中。
默認情況下,在Swift 3中,不按名稱將等於0
的NS_OPTIONS
枚舉導入到Swift中。 您必須在Swift中使用[]
來獲取它。
將枚舉的值更改為1
,將導入名稱。
如果您考慮一下,這是很合理的。 NS_OPTIONS
用於位掩碼。 因此,如果(比方說) .one
為0
和.two
是1
,不存在對表達沒有有用的意義[.one, .two]
因為沒有通過的存在添加的信息.one
。
另一方面,您所做的總是濫用NS_OPTIONS
,因為它不是位掩碼。 您的修改將其變成一個。 (Objective-C不會神奇地為您生成適合位掩碼的值。)
我發現解決方案是在選項中添加顯式位掩碼值:
typedef NS_OPTIONS (NSInteger, Options){
OptionsOne = 1 << 0,
OptionsTwo = 1 << 1,
OptionsThree = = 1 << 2
};
錯誤消失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.