2016-04-06 7 views
1

私は、迅速なプロジェクトでObjctive-C静的ライブラリを使用する必要があります。それ以外はうまくいくが、このようにObjC-Cのヘッダファイルで定義されたNS_OPTIONS列挙、:すぐにObs-Cクラスで定義されたns_optionsの使用方法

#import <Foundation/Foundation.h> 

typedef NS_OPTIONS(NSUInteger, MyOption) { 
    MyOptionNone = 0, 
    MyOptionTop = 1 << 0, 
    MyOptionLeft = 1 << 1, 
    MyOptionBottom = 1 << 2, 
    MyOptionRight = 1 << 3 
}; 

@interface MyObjcClass : NSObject 

@end 

、その後.swiftファイルで、どのように私は、スイッチケースで、この列挙型を使用することができますか?

編集:私は私の迅速なクラスでMyOptionを使用 :

let option1:MyOption = .Top 
let option2:MyOption = .Bottom 
let value = option1 & option2 

、私はコンパイルエラーを取得:

Binary operator '&' cannot be applied to two MyOption operands 

この問題を解決する方法は?

答えて

5

まず、構文を修正する必要があります。あなたのブリッジングヘッダーで、あなたはMyOptionを定義するヘッダファイルをインポートする必要があり、

typedef NS_OPTIONS(NSUInteger, MyOption) { 
    MyOptionNone = 0, 
    MyOptionTop = 1 << 0, 
    MyOptionLeft = 1 << 1, 
    MyOptionBottom = 1 << 2, 
    MyOptionRight = 1 << 3 
}; 

次へ:あなたは閉じ括弧の後にセミコロンを必要としています。最初にObjective-CプロジェクトへのSwiftソースファイルを作成するとき、またはSwiftプロジェクトでObjective-Cソースファイルを最初に作成するときに、Xcodeはブリッジヘッダーを作成することを提案します。名前はProjectName-Bridging-Header.hです。例えばので:

bridging header

あなたはこれをやった、との両方のヘッダファイルを使用すると、スウィフトからMyOptionを使用することができ、エラーなしでコンパイルすることができたら。それはOptionSetTypeです。例:

MyOption usage

+0

こんにちは、ロブ、私はこれを知っているが、私は、スイッチケースにMyOptionを使用したい場合は? "case .Top"はコンパイルエラーを引き起こします:MyOption型にEnum case "Top"が見つかりません – SomnusLee

+1

スイッチケースで使用すると意味がありません。なぜなら、MyOption値には複数のオプションが含まれている可能性があるからです。 '.Top'と' .Bottom'の両方を含んでいるかもしれないので、複数のケースにマッチする必要があり、Swift switch文はそれを行うことができません。 options.contains(.Bottom){...} 'なら' if options.contains(.Top){...}を使うべきです。 –

+0

さて、私は〜を参照してくださいThx – SomnusLee

関連する問題