Ne "Objective-C Harfleri" ayrıntılar Güncellemelerinden 4.4 sürüm notları bahsetmedi mi?
Böyle büyük mükafat 4.4 için sürüm notlarına bakıyordum ve bu fark:
LLVM 4.0 Derleyici
Güncellemelerinden şimdi Apple LLVM Derleyici sürümü aşağıdakiler de dahil olmak üzere 4.0 içerir newObjective-C dil özellikleri: [...]
- Objective-C harfleri: NSArray, NSDictionary ve NSNumber, NSString için . hazır olarak sadece aynı rakamları oluşturmak
Bu özellik hakkında ilgimi çekti. NSString
hazır iş sadece ve tek NSArray
, NSDictionary
NSNumber
onları kullanabilirsiniz nasıl tamamen bana net değil.
Detaylar nelerdir?
CEVAP
Verbatim http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and kopyalanır:
Objective-C rakamları:şimdi NSArray, NSDictionary ve NSNumber bir NSString için hazır oluşturmak gibi () için hazır oluşturmak mümkün
NSArray Hazır
Daha önce:
array = [NSArray arrayWithObjects:a, b, c, nil];
Şimdi:
array = @[ a, b, c ];
NSDictionary Hazır
Daha önce:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
Şimdi:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
NSNumber Hazır
Daha önce:
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]
zxoqhttp://news.ycombinator.com/item?id=3672744 eklendi daha ilginç yeni harfleri (ya da daha doğrusu hazır yeni kullanım alanları):
arr[@1] === [arr objectAtIndex:1]
dict[@"key"] === [dict objectForKey:@"key"]
2 [değiştir]
Yeni ObjC harfleri WWDC 2012 çoklu oturumlarda tartışıldı. Ben bilerek Eğer istersen kendin için onları bulabilirsiniz böylece dosya adları ve her slaytın zaman kesmedi. Aslında bu yazı da belirtildiği gibi aynı şeydir, ama aynı zamanda yukarıdaki resimlerde bahsedeceğim birkaç yeni şey var.
Lütfen resimleri büyük olduğunu unutmayın. Sadece orijinal boyutunda görüntülemek için başka bir sekmeye sürükleyin
[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.İfadesi Hazır
Bir ifade (örneğinM_PI / 16
) parantez içini dökmelisin.
Bu sözdizimi, sayısal ifadeler, mantıksal bir dizin (C) string, boolean değerleri bulma, numaralandırma sabitler ve karakter dizeleri için bile ç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") );
Bu değişmez sözdizimini kullanabilirsiniz zaman daha fazla karakter dizeleri hakkında ve nasıl/:
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...
}
Nasıl dizi hazır iş
// 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];
Nasıl sözlük rakamları çalışma
// 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];
Daha fazla dizi subscripting
@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 subscripting daha fazla
@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;
}
3 [değiştir]
Mike Ash bu yeni rakamları hakkında harika bir yazı var. Eğer bu şeyler hakkında daha fazla öğrenmek istiyorsanız, check it out emin olun.
4 - " Güncellemelerinden;Arşiv&quo...
Bir "onların yok&; "sürüm gı...
&Quot nedir;@Özel" Objective-C?...
Quot; hedef cihazda hiçbir Şey olmuyor...
Objective-C's "örneğin,"...