Как исключить регистр C enum при использовании типа в Swift - PullRequest
0 голосов
/ 25 января 2019

В моем C-коде у меня обычно есть регистр перечисления, называемый count в концеНо когда я использую мое перечисление в Swift, оно также будет иметь это значение, которое я должен обработать в операторах switch.

Есть ли какой-нибудь атрибут, который я могу использовать, чтобы исключить регистр при импорте в Swift?

1 Ответ

0 голосов
/ 25 января 2019

Вы можете использовать макрос NS_SWIFT_UNAVAILABLE для перечислителей:

typedef NS_ENUM(unsigned, Foo) {
    bar,
    baz,
    count NS_SWIFT_UNAVAILABLE("Count does not represent a case")
};

NS_SWIFT_UNAVAILABLE, как и любой __attribute__, который вы хотите применить к перечислителю, идет после имени перечислителя, но перед = если вам нужно.

Макрос определяется, если вы включите <Foundation/Foundation.h>.Если вы включите CoreFoundation, вы получите CF_SWIFT_UNAVAILABLE, что делает то же самое.Если вы не включите ни то, ни другое, вы можете использовать длинную форму:

__attribute__((availability(swift, unavailable, message="your message")))

Перечислители, помеченные NS_SWIFT_UNAVAILABLE, не будут отображаться при автозаполнении и не вызовут проблем со сборкой, если они не обработаны.на Свифт стороне.Если вы попытаетесь его использовать, вы получите серьезную ошибку, включающую ваше сообщение.

Имейте в виду, что, начиная с Swift 5, вам может потребоваться использовать NS_CLOSED_ENUM вместо NS_ENUM если ваша цель - избежать default дела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...