簡體   English   中英

快速選項中的NS_OPTIONS訪問不可用

[英]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中,不按名稱將等於0NS_OPTIONS枚舉導入到Swift中。 您必須在Swift中使用[]來獲取它。

將枚舉的值更改為1 ,將導入名稱。

如果您考慮一下,這是很合理的。 NS_OPTIONS用於位掩碼。 因此,如果(比方說) .one0.two1 ,不存在對表達沒有有用的意義[.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM