Http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and adresinden kopyalanan kelimesi kelimesine :
Objective-C değişmez değerleri: Artık NSArray, NSDictionary ve NSNumber için değişmez değerler oluşturulabilir (tıpkı NSString için değişmez değerler oluşturabilir gibi)
NSArray Değişmezleri
Önceden:
array = [NSArray arrayWithObjects:a, b, c, nil];
Şimdi:
array = @[ a, b, c ];
NSDictionary Değişmezleri
Önceden:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
Şimdi:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
NSNumber Değişmez Değerler
Önceden:
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];
Şimdi:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
[Düzenle]
zxoq de http://news.ycombinator.com/item?id=3672744 daha ilginç yeni Altsimgeleme eklemiştir. (Değişmez değerler ile eklendi):
arr[1] === [arr objectAtIndex:1]
dict[@"key"] === [dict objectForKey:@"key"]
[Düzenle 2]
Yeni ObjC hazır bilgileri birden fazla WWDC 2012 oturumunda tartışıldı . Kasıtlı olarak her slaydın dosya adlarını ve zamanını kaldırmadım, böylece isterseniz kendiniz bulabilirsiniz. Bunlar aslında bu yazıda belirtilenle aynı, ancak görüntülerin üzerinde bahsedeceğim birkaç yeni şey var.
Lütfen resimlerin büyük olduğunu unutmayın. Orijinal boyutlarında görüntülemek için bunları başka bir sekmeye sürüklemeniz yeterlidir
[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]
Bu bölüm yeni. İfade Değişmezleri
Bir ifadeniz olduğunda ( M_PI / 16
örneğin) ifadeyi parantez içine almalısınız.
Bu sözdizimi, sayısal ifadeler, booleans, (C-) dizesinde bir dizin bulma, boolean değerleri, enum sabitleri ve hatta karakter dizeleri için çalışır!
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") );
Karakter dizeleri ve bu değişmez sözdizimini nasıl / ne zaman kullanabileceğiniz hakkında daha fazla bilgi:
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...
}
Dizi değişmezleri nasıl çalışır?
// 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];
Sözlük değişmezleri nasıl çalışır?
// 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];
Dizi aboneliği hakkında daha fazla bilgi
@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;
}
Sözlük aboneliği hakkında daha fazla bilgi
@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;
}
[Düzenle 3]
Mike Ash'in bu yeni değişmezler hakkında harika bir yazısı var. Bu şeyler hakkında daha fazla bilgi edinmek istiyorsanız, kontrol ettiğinizden emin olun .