2016-07-14 9 views
0

これはObserveTypeというNS_ENUMと呼ばれる2つのプロパティObserveObserveAllというプロパティを持っています。画像からわかるようにObserveAllプロパティにアクセスできますが、Observeにアクセスすることはできません。SwiftのNS-ENUMへのアクセス

NS_ENUMは、objective-Cのヘッダファイルにあります。

ObserveObserveXまたはObserveXYZに変更することはわかっています。

しかし、どのように、私はObserveの名前を変更せずにObserveにアクセスできますか?

私はSwiftのObserveにアクセスする必要があります。 Language Guide - Interoperability - Interacting with C APIsから

enter image description here

答えて

0

「彼らはスウィフトにインポートされたときにC列挙ケース名に接頭辞が、彼らはシステムフレームワークまたはカスタムコードで で定義されているかどうか、削除されます。 "

これはObserveType列挙型で、あなたの最初のケースは、(私はコンパイルエラーが得られない、やや驚いている)スウィフトにインポートされた後は名前を持っていないことを意味します。私たちは、変換を印刷した場合、それはあなたがそのrawValue0)を使用して、無名のケースにアクセスしようとすることができますが、私は最初の名前を更新推薦する(概念的には)

typedef NS_ENUM(NSInteger, ObserveType) { 
    Observe = 0 
    ObserveAll = 1 
}; 

// imported like ... 
enum ObserveType: Int { 
    case _ = 0 // obviously illegal if applied directly in Swift 
    case All 
} 

のようになります。可能であれば、あなたのObj-C列挙型のケース。

if let empty = ObserveType(rawValue: 0) { 
    print(empty) // prints ""? 
} 
0

dfriの答え上のスポット、そして彼の答えに拡張することです、それは広く採用されている規則に従って列挙し、その例に名前を付けるためにおそらく最高です。次のコードでは、私はあなたの意図について特定の推測をしています。プロジェクトで作業するとき、私は便利

typedef NS_ENUM(NSUInteger, XYZObserveType) { 
    XYZObserveOne, 
    XYZObserveAll 
} 

もう一つのヒントは、スウィフトとObjective-Cのコードの両方がソースエディタでGenerated Interfaceで含まれています。

Objective-Cクラスを表示しているときにこのオプションを選択すると、生成されたSwiftヘッダーが表示されます。これは多くの場合役に立ちます。

関連する問題