我在Objective-C .h文件中定义了一个NS_OPTIONS:
typedef NS_OPTIONS (NSInteger, Options){
OptionsOne,
OptionsTwo,
OptionsThree
};
现在从Swift访问时:
public func myFunc() -> Options {
return [.one, .two]
}
我收到此错误:
'one'不可用:使用[]构造一个空选项集。
但我没有收到.two或.three的错误。它似乎只适用于第一种选择。
答案 0 :(得分:3)
默认情况下,在Swift 3中,NS_OPTIONS
枚举等于0
的名称不会导入Swift。你必须在Swift中使用[]
才能得到它。
当您将enumerand的值更改为1
时,名称已导入。
如果你考虑一下,这是完全合理的。 NS_OPTIONS
用于位掩码。因此,如果(假设).one
为0
且.two
为1
,则表达式[.one, .two]
没有任何用处,因为没有添加任何信息由于.one
。
另一方面,你所做的是总是误用NS_OPTIONS
,因为它不是位掩码。您的修改将其变为一个。 (Objective-C不会为你神奇地生成适合于bitmask的值。)
答案 1 :(得分:0)
我发现这个解决方案是在选项中添加显式位掩码值:
typedef NS_OPTIONS (NSInteger, Options){
OptionsOne = 1 << 0,
OptionsTwo = 1 << 1,
OptionsThree = = 1 << 2
};
并且错误消失了。