2012-10-25 9 views
19

Xcode nie daje błąd mojego (myśli-to-be) typo:Czy skracany znak zapytania to dwukropek ?: składnia Objective-C?

NSString *theme = [[NSUserDefaults standardUserDefaults] objectForKey:@"theme"]; 
NSLog(@"Theme: %@", theme ?: @"Default"); 

Okazuje się:

NSLog(@"Theme: %@", theme ?: @"Default"); 

prace samo jak:

NSLog(@"Theme: %@", theme ? theme : @"Default"); 

Czy powyższa skrócona składnia jest dobra dla gcc only? Lub jest częścią Objective-C?

+0

Link dałeś wyraźnie stwierdzono, że był to rozszerzenie GNU języka _C_. Nie wspomina o Objective-C, który jest nadzbiorem C. –

+2

To jest najlepsza rzecz, którą czytałem na SO przez cały miesiąc. Uwielbiam uczyć się nowego gówna !! –

+0

W jaki sposób 'a?: B' różni się od' a || b'? – jameshfisher

Odpowiedz

17

Jest to rozszerzenie GNU do wyrażenia warunkowego w C:

Od here:

rozszerzeniem GNU do C umożliwia pominięcie drugiego argumentu, a przy użyciu niejawnie pierwszy argument jako drugi również :

a = x ? : y; 
+2

Również cytowałem link wikipedia w moim pytaniu. Ponieważ Apple odchodzi od gcc do llvm, jestem ciekawy, czy jest to oficjalna składnia w Objective-C. – ohho

+2

@ohho Yeah Nie widziałem linku w twoim pytaniu. Zmieniają się w kierunku klang, który zapewnia kompatybilność z GCC 4.2, więc utrzymuje rozszerzenia GNU. – trojanfoe

Powiązane problemy