5

J2objc を使用して Java を Objective-C に変換します。このコードをブリッジ ヘッダーと共に使用して、Swift で使用できるようにします。これが私が翻訳したJava Enumです:

public enum BTestType {

  Type1, Type2, Type3;

}

Objective-C では、次のヘッダー ファイルを取得します (モジュール ファイルはスキップします)。

#ifndef _BISBTestType_H_
#define _BISBTestType_H_

#include "J2ObjC_header.h"
#include "java/lang/Enum.h"

typedef NS_ENUM(NSUInteger, BISBTestType) {
  BISBTestType_Type1 = 0,
  BISBTestType_Type2 = 1,
  BISBTestType_Type3 = 2,
};

@interface BISBTestTypeEnum : JavaLangEnum < NSCopying >

#pragma mark Package-Private

+ (IOSObjectArray *)values;
FOUNDATION_EXPORT IOSObjectArray *BISBTestTypeEnum_values();

+ (BISBTestTypeEnum *)valueOfWithNSString:(NSString *)name;
FOUNDATION_EXPORT BISBTestTypeEnum *BISBTestTypeEnum_valueOfWithNSString_(NSString *name);

- (id)copyWithZone:(NSZone *)zone;

@end

J2OBJC_STATIC_INIT(BISBTestTypeEnum)

FOUNDATION_EXPORT BISBTestTypeEnum *BISBTestTypeEnum_values_[];

#define BISBTestTypeEnum_Type1 BISBTestTypeEnum_values_[BISBTestType_Type1]
J2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type1)

#define BISBTestTypeEnum_Type2 BISBTestTypeEnum_values_[BISBTestType_Type2]
J2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type2)

#define BISBTestTypeEnum_Type3 BISBTestTypeEnum_values_[BISBTestType_Type3]
J2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type3)

J2OBJC_TYPE_LITERAL_HEADER(BISBTestTypeEnum)

typedef BISBTestTypeEnum BISTestTypeEnum;

#endif // _BISBTestType_H_

Swift で列挙型にアクセスするには、次のように呼び出す必要がありました。

 var r:BISBTestTypeEnum = BISBTestTypeEnum.values().objectAtIndex(BISBTestType.Type1.rawValue) as! BISBTestTypeEnum

Swift で object-c 列挙型にアクセスする簡単な方法はありますか?

4

3 に答える 3

2

これを行うには、もっと簡単な方法があります。フラグを追加すると、次の--static-accessor-methodsようにアクセスできます。

var r:BISBTestTypeEnum = BISBTestTypeEnum.Type1()
于 2015-05-20T16:08:01.030 に答える
-1

BISBTestTypeEnum_get_Type2()メソッド(マクロから派生)を使用できるように見えますJ2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type2)が、これはコンパイルに合格しますが、リンク時に失敗します。

于 2015-04-25T18:21:49.470 に答える