SORU
19 ŞUBAT 2012, Pazar


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
19 ŞUBAT 2012, Pazar


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

Literals & Boxing

[NSNumber numberWithint:42]
[NSNumber numberWithDouble:10.8]
[NSNumber numberWithBool:YES]
[NSNumber numberWithint:6   x * 2012]

Literals & Boxing

@42
@10.8
@YES
@(6   x * 2012)

Collection Subscripting

[NSArray arrayWithObjects: a, b, c, nil]
[array objectAtIndex:i]
[NSDictionary dictionaryWithObjectsAndKeys: v1, k1, v2, k2, nil];
[dictionary valueForKey:k]

Collection Subscripting

@[a, b, c]
array[i]
@{k1:v1, k2:v2}
dictionary[k]

@# numbers, @{} dictionaries, @"" strings, @[] arrays, @() expressions


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!

Expression Literals

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")];

Expression Literals

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/:

Boxed String Expressions

NSString *path = [NSString stringWithUTF8String: getenv("PATH")];
for (NSString *dir in [path componentsSeparatedByString: @":"]) {
    // search for a file in dir...
}

Boxed String Expressions

NSString *path = @( getenv("PATH") );
for (NSString *dir in [path componentsSeparatedByString: @":"]) {
    // search for a file in dir...
}

Nasıl dizi hazır iş

How array literals work

// 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

How dictionary literals work

// 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

Array Subscripting

@implementation SongList {
    NSMutableArray *_songs;
}

- (Song *)replaceSong:(Song *)newSong atindex:(NSUinteger)idx {
    Song *oldSong = [_songs objectAtIndex:idx];
    [_songs replaceObjectAtindex:idx withObject:newSong];
    return oldSong;
}

Array Subscripting

@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

Dictionary 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;
}

Dictionary Subscripting

@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.


Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bucky Roberts

    Bucky Robert

    9 HAZİRAN 2011
  • Gan Eden Productions

    Gan Eden Pro

    11 HAZİRAN 2011
  • placeboing

    placeboing

    7 Mart 2006