1

私はObjective-CにOS X/iOSフレームワークを書いています。Objective-CまたはSwiftのいずれかを使用している開発者にとって、フレームワークが役に立ちたいと思います。通常のObjective-Cの列挙この(この例ではApple's own UIView class referenceから直接取得される)のように定義されているで標準命名法でSwiftとObjCの両方の列挙型を作成するにはどうすればよいですか?

typedef enum { 
    UIViewAnimationCurveEaseInOut, 
    UIViewAnimationCurveEaseIn, 
    UIViewAnimationCurveEaseOut, 
    UIViewAnimationCurveLinear 
} UIViewAnimationCurve; 

この列挙はスウィフトフレンドリーにするために、私の理解では、それはこのように宣言されなければならないということです。

typedef NS_ENUM(NSInteger, UIViewAnimationCurve) { 
    UIViewAnimationCurve_EaseInOut, 
    UIViewAnimationCurve_EaseIn, 
    UIViewAnimationCurve_EaseOut, 
    UIViewAnimationCurve_Linear 
}; 

これは、列挙型は、スウィフトからlet curve: UIViewAnimationCurve = .EaseInOutのスタイルにアクセスすることを可能にします。

私の問題は、NS_ENUMとアンダースコアメソッドが、Objective-Cから使用すると、奇妙な名前の列挙型を生成するということです。NS_ENUMメソッドではSwiftからドット表記法を使用できますが、ObjCコードでは列挙された名前にアンダースコアを使用する必要があり、望ましくありません。

ObjCコード内でObjective-Cスタイルの命名規則を維持しながら、Swiftのドット表記を許可するにはどうすればよいですか?

答えて

3

通常の規約に従うだけで、下線は必要ありません。 Swiftコンパイラは、共通の接頭辞(enum型の名前と一致する部分)を切り取るだけで十分です。あなたはSwiftに見えるようにenumを入れるためにNS_ENUMを使わなければなりませんが、とにかくそれは良い練習です。

enter image description here

UIViewAnimationCurveは、あなたの最初のコード例に説明するだけの形でのObjective-Cヘッダで定義され、スウィフトにだけで正常に動作しているインスタンスの

ポイントのケース、

関連する問題