(自分用メモ)
typedef enum
で定義していたenumはそのままではSwiftでは使えない。
Objective-C
typedef enum {
STATUS_IDLE,
STATUS_CONNECTED,
STATUS_DISCONNECTED
} STATUS;
NS_ENUM
を使って書き換える。
Objective-C
typedef NS_ENUM(NSInteger, STATUS) {
STATUS_IDLE,
STATUS_CONNECTED,
STATUS_DISCONNECTED
};
Swiftではこう変換される。
Swift
enum STATUS: Int {
case IDLE
case CONNECTED
case DISCONNECTED
}
この時に各メンバの接頭辞が自動で省略されるので注意。おそらく列挙子の名前をメンバ名に対してマッチングして一致する部分+アンダースコア(あれば)までを省略していると思われる。
例えば、以下の場合、
Objective-C
typedef enum {
WF_SENSOR_CONNECTION_STATUS_IDLE,
WF_SENSOR_CONNECTION_STATUS_CONNECTING,
WF_SENSOR_CONNECTION_STATUS_CONNECTED,
WF_SENSOR_CONNECTION_STATUS_INTERRUPTED,
} WFSensorConnectionStatus_t;
NS_ENUM
を使って以下のように書き換えると、
Objective-C
typedef NS_ENUM(NSInteger, WFSensorConnectionStatus_t) {
WF_SENSOR_CONNECTION_STATUS_IDLE,
WF_SENSOR_CONNECTION_STATUS_CONNECTING,
WF_SENSOR_CONNECTION_STATUS_CONNECTED,
WF_SENSOR_CONNECTION_STATUS_INTERRUPTED,
WF_SENSOR_CONNECTION_STATUS_DISCONNECTING,
};
Swiftからは以下のように見える。
Swift
enum WFSensorConnectionStatus_t {
case SENSOR_CONNECTION_STATUS_IDLE
case SENSOR_CONNECTION_STATUS_CONNECTING
case SENSOR_CONNECTION_STATUS_CONNECTED
case SENSOR_CONNECTION_STATUS_INTERRUPTED
case SENSOR_CONNECTION_STATUS_DISCONNECTING
}
先頭のWF_
の部分がアンダースコアを含めて省略されている。
要追加検証。