Литерал @YES не работает в iOS 5 / Xcode 4.4
Выпущен новый Xcode 4.4, и он должен поддерживать такие литералы, как
@42
@"String"
@23.0L
@{ @"key" : obj }
а также@[obj1, obj2]
и это должно также поддерживать @YES
а также @NO
, который не работает при таргетинге на последнюю iOS 5 (и ранее). После компиляции покажите сообщение об ошибке:
Неожиданное имя типа 'BOOL': ожидаемое выражение
Я знаю, что вы можете это исправить, набрав @(YES)
а также @(NO)
, Но я хочу знать причину, почему это не работает, как ожидалось.
2 ответа
Причина в том, что Apple забыла здесь скобки:
#define YES (BOOL)1
Это будет исправлено в iOS 6 SDK:
#define YES ((BOOL)1)
В то же время вы должны ввести @(YES)
,
Это полезно для информации о литералах.
Комментатор на этот ответ также указывает:
Есть одна маленькая вещь, о которой я хотел бы предупредить. Литеральные bools также не поддерживаются из-за этого. Тем не менее, быстрое исправление, которое я реализовал, добавило это в начало одного из моих общих заголовков (в проекте iOS)
#ifndef __IPHONE_6_0 #if __has_feature(objc_bool) #undef YES #undef NO #define YES __objc_yes #define NO __objc_no #endif #endif
@ phix23s ответ, кажется, более к сути. Вы должны принять это.
Это стоило добавить из комментариев:
Следует отметить, что это необходимо сделать после #import. Если вы поместите эти #defines в свой Prefix.pch, они должны обязательно импортировать Foundation ранее в pch