Copié mot à mot de http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and:
Objective-C littéraux: on peut maintenant créer des littéraux pour NSArray, NSDictionary, et NSNumber (tout comme on peut créer des littéraux pour NSString)
NSArray Littéraux
Précédemment:
array = [NSArray arrayWithObjects:a, b, c, nil];
Maintenant:
array = @[ a, b, c ];
NSDictionary Littéraux
Précédemment:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
Maintenant:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
NSNumber Littéraux
Précédemment:
NSNumber *number;
number = [NSNumber numberWithChar:'X'];
number = [NSNumber numberWithInt:12345];
number = [NSNumber numberWithUnsignedLong:12345ul];
number = [NSNumber numberWithLongLong:12345ll];
number = [NSNumber numberWithFloat:123.45f];
number = [NSNumber numberWithDouble:123.45];
number = [NSNumber numberWithBool:YES];
Maintenant:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
[Modifier]
zxoq à http://news.ycombinator.com/item?id=3672744 a ajouté plus intéressantes nouvelles de littéraux (ou plutôt de nouvelles utilisations de littéraux):
arr[@1] === [arr objectAtIndex:1]
dict[@"key"] === [dict objectForKey:@"key"]
[Edit 2]
La nouvelle ObjC littéraux ont été abordés dans plusieurs WWDC 2012 sessions. J'ai volontairement de ne pas supprimer les noms de fichiers et le temps d'affichage de chaque diapositive de sorte que vous pouvez les trouver par vous-même si vous vous sentez comme. Ils sont essentiellement la même chose comme indiqué dans ce post, mais il y a aussi un peu de nouvelles choses que je vais parler ci-dessus les images.
Veuillez noter que les images sont toutes de grandes. Faites-les simplement glisser dans un autre onglet pour les voir dans leur taille d'origine
[NSNumber numberWithint:42]
[NSNumber numberWithDouble:10.8]
[NSNumber numberWithBool:YES]
[NSNumber numberWithint:6 + x * 2012]
@42
@10.8
@YES
@(6 + x * 2012)
[NSArray arrayWithObjects: a, b, c, nil]
[array objectAtIndex:i]
[NSDictionary dictionaryWithObjectsAndKeys: v1, k1, v2, k2, nil];
[dictionary valueForKey:k]
@[a, b, c]
array[i]
@{k1:v1, k2:v2}
dictionary[k]
Cette partie est nouvelle. Expression Des Littéraux
Lorsque vous avez une expression (M_PI / 16
par exemple), vous devriez le mettre à l'intérieur de la parenthèse.
Cette syntaxe fonctionne de chiffre d'expressions, les booléens, de trouver un indice dans un (C-) chaîne de caractères, booléen, enum constantes, et même des chaînes de caractères!
NSNumber *piOverSixteen = [NSNumber numberWithDouble: (M_PI / 16)];
NSNumber *hexDigit = [NSNumber numberWithChar:"0123456789ABCDEF"[i % 16]];
NSNumber *usesScreenFonts = [NSNumber numberWithBool:[NSLayoutManager usesScreenFonts]];
NSNumber *writingDirection = [NSNumber numberWithInt:NSWritingDirectionLeftToRight];
NSNumber *path = [NSString stringWithUTF8String: getenv("PATH")];
NSNumber *piOverSixteen = @( M_PI / 16 );
NSNumber *hexDigit = @( "0123456789ABCDEF"[i % 16] );
NSNumber *usesScreenFonts = @( [NSLayoutManager usesScreenFonts] );
NSNumber *writingDirection = @( NSWritingDirectionLeftToRight );
NSNumber *path = @( getenv("PATH") );
Plus sur les chaînes de caractères et comment/quand vous pouvez utiliser cette syntaxe littérale:
NSString *path = [NSString stringWithUTF8String: getenv("PATH")];
for (NSString *dir in [path componentsSeparatedByString: @":"]) {
// search for a file in dir...
}
NSString *path = @( getenv("PATH") );
for (NSString *dir in [path componentsSeparatedByString: @":"]) {
// search for a file in dir...
}
Comment les littéraux de tableau de travail
// when you write this:
array = @[a, b, c ];
// compiler generates:
id objects[] = { a, b, c };
NSUInteger count = sizeof(objects) / sizeof(id);
array = [NSArray arrayWithObjects:objects count:count];
Comment dictionnaire des littéraux de travail
// when you write this:
dict = @{k1 : o1, k2 : o2, k3 : o3 };
// compiler generates:
id objects[] = { o1, o2, o3 };
id keys[] = { k1, k2, k3 };
NSUInteger count = sizeof(objects) / sizeof(id);
dict = [NSDictionary dictionaryWithObjects:objects
forKeys:keys
count:count];
Plus sur les indices de tableaux
@implementation SongList {
NSMutableArray *_songs;
}
- (Song *)replaceSong:(Song *)newSong atindex:(NSUinteger)idx {
Song *oldSong = [_songs objectAtIndex:idx];
[_songs replaceObjectAtindex:idx withObject:newSong];
return oldSong;
}
@implementation SongList {
NSMutableArray *_songs;
}
- (Song *)replaceSong:(Song *)newSong atindex:(NSUinteger)idx {
Song *oldSong = _songs[idx];
_songs[idx] = newSong;
return oldSong;
}
Plus sur dictionnaire subscripting
@implementation Database {
NSMutableDictionary *_storage;
}
- (id)replaceObject:(id)newObject forKey:(id <NSCopying>)key {
id oldObject = [_storage objectForKey:key];
[_storage setObject:object forKey:key];
return oldObject;
}
@implementation Database {
NSMutableDictionary *_storage;
}
- (id)replaceObject:(id)newObject forKey:(id <NSCopying>)key {
id oldObject = _storage[key];
_storage[key] = newObject;
return oldObject;
}
[Edit 3]
Mike Ash a une grande writeup sur ces nouveaux littéraux. Si vous voulez en savoir plus sur ce genre de choses, assurez-vous de le vérifier.