Перечисления
C импортируются в Swift как enum
, если они определены с помощью макроса NS_ENUM
или CF_ENUM
, см., Например, Как импортировать c перечисление в swift .
CF_ENUM
определяется в CFAvailability.h
из платформы Core Foundation, поэтому вам необходимо импортировать этот файл, если он еще не был импортирован косвенно через другие включаемые файлы Core Foundation:
#include <CoreFoundation/CFAvailability.h>
typedef CF_ENUM(int, Foo) {
A = 0,
B = 1
};
Если вы посмотрите определение CF_ENUM
, то увидите, что оно определено в терминах атрибута Clang enum_extensibility
и расширяется до
typedef enum __attribute__((enum_extensibility(open))) : int {
A = 0,
B = 1
} Foo;
Оба объявления импортируется в Swift как
public enum Foo : Int32 {
case A
case B
}
, и последняя версия не нуждается в дополнительных подключаемых файлах.
(Различие между «открытыми» и «закрытыми» перечислениями см. SE 0192 Обработка будущих случаев перечисления .)