Salinan kata demi kata dari http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
Objective-C literals: seseorang sekarang dapat membuat literal untuk NSArray, NSDictionary, dan NSNumber (seperti halnya seseorang dapat membuat literal untuk NSString)
NSArray Literals
Sebelumnya:
array = [NSArray arrayWithObjects:a, b, c, nil];
Sekarang:
array = @[ a, b, c ];
NSDictionary Literals
Sebelumnya:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
Sekarang:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
NSNumber Literals
Sebelumnya:
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];
Sekarang:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
[Sunting]
zxoq di http://news.ycombinator.com/item?id=3672744 telah menambahkan langganan baru yang lebih menarik. (Ditambahkan dengan literal):
arr[1] === [arr objectAtIndex:1]
dict[@"key"] === [dict objectForKey:@"key"]
[Sunting 2]
Literal ObjC baru dibahas dalam beberapa sesi WWDC 2012 . Saya sengaja tidak menghapus nama file dan waktu setiap slide sehingga Anda dapat menemukannya sendiri jika Anda mau. Mereka pada dasarnya hal yang sama seperti yang dinyatakan dalam posting ini, tetapi ada juga beberapa hal baru yang akan saya sebutkan di atas gambar.
Harap perhatikan bahwa gambar semuanya besar. Cukup seret ke tab lain untuk melihatnya dalam ukuran aslinya
[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]
Bagian ini baru. Literal Ekspresi
Ketika Anda memiliki ekspresi ( M_PI / 16
misalnya), Anda harus meletakkannya di dalam tanda kurung.
Sintaks ini berfungsi untuk ekspresi angka, boolean, menemukan indeks dalam string (C-), nilai boolean, konstanta enum, dan bahkan string karakter!
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") );
Lebih lanjut tentang string karakter dan bagaimana / kapan Anda dapat menggunakan sintaks literal ini:
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...
}
Cara kerja literal array
// 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];
Cara kerja kamus literal
// 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];
Lebih lanjut tentang array subscript
@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;
}
Lebih lanjut tentang subskripsi kamus
@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;
}
[Sunting 3]
Mike Ash memiliki artikel bagus tentang literal baru ini. Jika Anda ingin tahu lebih banyak tentang hal ini, pastikan untuk memeriksanya .