2012-07-27 15 views
9

Neue Xcode 4.4 ist und es sollte Literale wieWörtliche @YES funktioniert nicht in iOS 5/Xcode 4.4

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

unterstützen und es sollte unterstützt auch @YES und @NO, die nicht funktioniert, wenn das neueste iOS 5 (und vorher) anvisiert. Nach dem Kompilieren es die Fehlermeldung angezeigt:

Unerwarteter Typ Name boolsche: erwartete Ausdruck

Ich weiß, man kann es beheben, indem @(YES) und @(NO) eingeben. Aber ich möchte den Grund wissen, warum es nicht wie erwartet funktioniert.

Antwort

24

Der Grund hierfür ist Apple die Klammern hier vergessen:

#define YES    (BOOL)1 

Dies behoben werden iOS 6 SDK:

#define YES    ((BOOL)1) 

In der Zwischenzeit Sie @(YES) eingeben müssen.

+0

Es sollte beachtet werden, dass dies nach dem '#import ' erfolgen muss - wenn man diese #defines in ihren Prefix.pch legt, sollten sie sicherstellen, Foundation früher in den PCH zu importieren. –

9

This ist nützlich für Informationen über Literale.

Ein Kommentator auf this answer weist auch darauf hin:

Es ist eine kleine Sache Ich mag würde zu warnen. Wörtliche Boole werden auch deshalb nicht unterstützt . Allerdings ist eine schnelle Lösung, die ich umgesetzt wurde das Hinzufügen diese an den Anfang eines meiner gemeinsamen Header (in einem iOS-Projekt)

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

@ phix23s Antwort scheint auf den Punkt mehr zu sein. Du solltest das akzeptieren.

Dies war wert von Kommentaren hinzufügen:

Es sollte beachtet werden, dass diese nach dem Import getan werden muss. Wenn man diese #defines in ihrer Prefix.pch legt, sollten sie sicherstellen, Foundation importieren früher in dem pch

+0

Diese Frage bezieht sich auf Subskribierung, die nur in iOS 6 verfügbar ist, weil es mehr als syntaktischer Zucker ist. number/bool/collection literals sollte in früheren Versionen verfügbar sein – wattson12

+0

Hmm - interessant - Ich habe gerade mein ios5.0-Projekt in die neuen Literale konvertiert und alles außer Subskribierung funktioniert gut. –

+0

Ja, scheint, ich lag falsch in diesem Teil. Ich werde ändern –

Verwandte Themen