คัดลอกคำต่อคำจากhttp://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdictionary-nsarray-and :
วัตถุประสงค์ -C ตัวอักษร:ตอนนี้สามารถสร้างตัวอักษรสำหรับ NSArray, NSDictionary และ NSNumber (เช่นเดียวกับที่สามารถสร้างตัวอักษรสำหรับ NSString)
ตัวอักษร NSArray
ก่อนหน้านี้:
array = [NSArray arrayWithObjects:a, b, c, nil];
ขณะนี้:
array = @[ a, b, c ];
ตัวอักษร NSDictionary
ก่อนหน้านี้:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
ขณะนี้:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
ตัวอักษร NSNumber
ก่อนหน้านี้:
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];
ขณะนี้:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
[แก้ไข]
zxoqที่http://news.ycombinator.com/item?id=3672744ได้เพิ่มตัวห้อยใหม่ที่น่าสนใจมากขึ้น (เพิ่มด้วยตัวอักษร):
arr[1] === [arr objectAtIndex:1]
dict[@"key"] === [dict objectForKey:@"key"]
[แก้ไข 2]
ตัวอักษร ObjC ใหม่ถูกกล่าวถึงในช่วงWWDC 2012หลายครั้ง ฉันตั้งใจไม่ลบชื่อไฟล์และเวลาของแต่ละสไลด์เพื่อให้คุณสามารถค้นหาได้ด้วยตัวเองหากคุณรู้สึกว่า โดยพื้นฐานแล้วมันก็เหมือนกับที่ระบุไว้ในโพสต์นี้ แต่ก็มีสิ่งใหม่ ๆ ที่ฉันจะพูดถึงข้างต้น
โปรดทราบว่าภาพทั้งหมดมีขนาดใหญ่ เพียงลากไปไว้ในแท็บอื่นเพื่อดูในขนาดดั้งเดิม
[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]
ส่วนนี้เป็นของใหม่ ตัวอักษรนิพจน์
เมื่อคุณมีนิพจน์ ( M_PI / 16
ตัวอย่าง) คุณควรใส่มันไว้ในวงเล็บ
ไวยากรณ์นี้ใช้สำหรับนิพจน์ตัวเลข, บูลีน, การค้นหาดัชนีในสตริง (C-), ค่าบูลีน, ค่าคงที่ enum และแม้แต่สตริงอักขระ!
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") );
เพิ่มเติมเกี่ยวกับสตริงอักขระและวิธี / เวลาที่คุณสามารถใช้ไวยากรณ์ตามตัวอักษรนี้:
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...
}
วิธีการทำงานของตัวอักษรแถวลำดับ
// 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];
พจนานุกรมตัวอักษรทำงานอย่างไร
// 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];
เพิ่มเติมเกี่ยวกับการห้อยอาร์เรย์
@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;
}
เพิ่มเติมเกี่ยวกับการห้อยพจนานุกรม
@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]
Mike Ashมีการเขียนที่ดีเกี่ยวกับตัวอักษรใหม่เหล่านี้ หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนี้ให้แน่ใจว่าจะตรวจสอบออก