Nguyên văn được sao chép từ http://cocoaheads.tumblr.com/post/17757846453/objective-c-literals-for-nsdipedia-nsarray-and :
Nghĩa đen của Objective-C: giờ đây người ta có thể tạo ra các chữ cho NSArray, NSDipedia và NSNumber (giống như người ta có thể tạo ra các chữ cho NSString)
NSArray
Trước đây:
array = [NSArray arrayWithObjects:a, b, c, nil];
Hiện nay:
array = @[ a, b, c ];
Văn học NSDixi
Trước đây:
dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3]
forKeys:@[k1, k2, k3]];
Hiện nay:
dict = @{ k1 : o1, k2 : o2, k3 : o3 };
NSNumber
Trước đây:
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];
Hiện nay:
NSNumber *number;
number = @'X';
number = @12345;
number = @12345ul;
number = @12345ll;
number = @123.45f;
number = @123.45;
number = @YES;
[Biên tập]
zxoq tại http://news.ycombinator.com/item?id=3672744 đã thêm đăng ký mới thú vị hơn. (Đã thêm bằng chữ):
arr[1] === [arr objectAtIndex:1]
dict[@"key"] === [dict objectForKey:@"key"]
[Chỉnh sửa 2]
Các chữ ObjC mới đã được thảo luận trong nhiều phiên WWDC 2012 . Tôi cố tình không xóa tên tệp và thời gian của mỗi slide để bạn có thể tự tìm chúng nếu bạn muốn. Chúng cơ bản giống như đã nêu trong bài đăng này, nhưng cũng có một vài điều mới mà tôi sẽ đề cập ở trên các hình ảnh.
Xin lưu ý rằng hình ảnh là tất cả lớn. Chỉ cần kéo chúng vào một tab khác để xem chúng ở kích thước ban đầu của chúng
[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]
Phần này là mới. Biểu hiện văn học
Khi bạn có một biểu thức ( M_PI / 16
ví dụ), bạn nên đặt nó trong ngoặc đơn.
Cú pháp này hoạt động cho các biểu thức số, booleans, tìm chỉ mục trong chuỗi (C-), giá trị boolean, hằng số enum và thậm chí cả chuỗi ký tự!
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") );
Tìm hiểu thêm về chuỗi ký tự và cách / khi bạn có thể sử dụng cú pháp bằng chữ này:
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...
}
Làm thế nào mảng chữ hoạt động
// 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];
Làm thế nào từ điển chữ
// 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];
Thêm về đăng ký mảng
@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;
}
Thêm về đăng ký từ điển
@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;
}
[Chỉnh sửa 3]
Mike Ash có một bài viết tuyệt vời về những tác phẩm mới này. Nếu bạn muốn biết thêm về công cụ này, hãy chắc chắn kiểm tra nó .