2012-07-27 5 views
9

새로운 엑스 코드 4.4 밖으로 아이폰 OS에서 작동하지 않는 그것은리터럴 @YES 5/Xcode의 4.4

@42
@"String"
@23.0L
@{ @"key" : obj }
@[obj1, obj2]

같은 리터럴을 지원해야하고해야 @YES@NO도 지원하며 최신 iOS 5 (및 이전 버전)를 타겟팅 할 때는 작동하지 않습니다. 는 오류 메시지가 표시 컴파일 후 :

예기치 않은 유형 이름 'BOOL'예상 표현

난 당신이 @(YES)@(NO)를 입력하여 문제를 해결할 수 있습니다 알고 있습니다. 그러나 예상대로 작동하지 않는 이유를 알고 싶습니다.

답변

24

이유는 애플이 여기에 괄호 깜빡입니다 앞부분 재단을 가져올 수 있는지 확인해야 아이폰 OS 6 SDK : 당신이 @(YES)를 입력해야합니다 한편

#define YES    ((BOOL)1) 

.

+0

이 작업은'#import '다음에해야합니다.이 #define을 자신의 Prefix.pch에 넣으면 이전에 pch에서 Foundation을 가져와야합니다. –

9

This은 리터럴에 대한 정보로 유용합니다.

this answer에 주석도 지적 :

내가 대해 경고하고 싶은 하나의 작은 일이있다. 리터럴 bool도이 때문에 을 지원하지 않습니다. 그러나, 나는이 구현 빠른 수정 phix23s 대답 @

#ifndef __IPHONE_6_0 
#if __has_feature(objc_bool) 
#undef YES 
#undef NO 
#define YES __objc_yes 
#define NO __objc_no 
#endif 
#endif 

는 점에 더 것 같다 (아이폰 OS 프로젝트) 내 일반적인 헤더의 처음 부분에 이 추가되었다. 당신은 그것을 받아 들여야합니다.

이는 # import를 후에 수행 될 필요가 있음을 주목해야한다 :

는 의견에서 추가 가치가 있었다.

#define YES    (BOOL)1 

이 고정됩니다 하나는 자신의 Prefix.pch에서 이러한 # 정의를두고 있다면, 그들은 PCH

+0

그 질문은 구문 상 설탕보다 많기 때문에 iOS 6에서만 사용할 수있는 아래 첨자를 말합니다. number/bool/collection 리터럴은 이전 버전에서 사용할 수 있어야합니다. – wattson12

+0

흠 - 흥미 롭습니다 - 저는 새 iOS5.0 프로젝트를 새 리터럴로 변환했는데 subscript를 제외한 모든 것이 잘 작동합니다. –

+0

그래, 내가 그 비트에 대해 틀렸어. 내가 수정하겠습니다 –