5

我使用 J2objc 将 Java 转换为 Objective-C。我将此代码与桥接头一起使用以使其在 Swift 中可用。这是我翻译的 Java 枚举:

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 中的objective-c 枚举?

4

3 回答 3

2

有一种更简单的方法可以做到这一点。添加--static-accessor-methods标志,然后您可以访问:

var r:BISBTestTypeEnum = BISBTestTypeEnum.Type1()
于 2015-05-20T16:08:01.030 回答
0

对于访问枚举的更简单方法,您可以扩展BISBTestTypeEnum该类并实现便利类方法:

extension BISBTestTypeEnum {
    class func withValue(value: BISBTestType) -> BISBTestTypeEnum {
        return BISBTestTypeEnum.values().objectAtIndex(value.rawValue) as! BISBTestTypeEnum
    }
}

然后你可以使用:

var r = BISBTestTypeEnum.withValue(BISBTestType.Type1)
于 2015-04-14T09:02:54.330 回答
-1

看来您可以使用该方法BISBTestTypeEnum_get_Type2()(从J2OBJC_ENUM_CONSTANT_GETTER(BISBTestTypeEnum, Type2)宏派生),但尽管这通过了编译,但它在链接时失败。

于 2015-04-25T18:21:49.470 回答