Objective-CのLiterals(字面量)


今日はObjective-C Literalsについて整理します.Literalsは字面量や字面値に翻訳され、ソースコードに直接書かれた値です.これは見知らぬ概念ではありません.私たちはプログラムを書くときに頻繁に見ることができます.NSStringの文字数はとっくに見ました.
NSString  *greeting = @"Hello World";

文法は簡単で、上のコードはC文字列の前に@記号を付けることでNSStringオブジェクトgreetingを作成し、全体のコードが簡潔で分かりやすいように見えます.直接量文法がなければ、このgreetingを作成するには以下の方法が必要かもしれません.
NSString *greeting = [NSString stringWithUTF8String:"Hello World"];

Xcode 4.4およびLLVM 4.0以降、いくつかの新しい特性が提案され、そのうちの1つは、NSNumber、NSArray、およびNSDictionaryに対して字面量構文を使用することである.
    NSNumber
新しいプロパティが提案される前に、NSNumberオブジェクトを作成する場合は、次のようになります.
NSNumber  *aNumber = [NSNumber  numberWithInt:22];

では、今すぐこのように書くことができます.
NSNumber  *aNumber = @22;

もちろんここでは-numberWithIntだけでなく、他のものにも適用されます.
//        :
NSNumber *aBool = [NSNumber numberWithBool:YES];
NSNumber *aChar = [NSNumber numberWithChar:'a'];
NSNumber *aUnsigned = [NSNumber numberWithUnsignedInt:22U];
NSNumber *aLong = [NSNumber numberWithLong:27L];
NSNumber *aFloat = [NSNumber numberWithFloat:3.14F];
NSNumber *aDouble = [NSNumber numberWithDouble:3.14];

//      
NSNumber *aBool = @YES;
NSNumber *aChar = @'a';
NSNumber *aUnsigned = @22U;
NSNumber *aLong = @27L
NSNumber *aFloat = @3.14F;
NSNumber *aDouble = @3.14;

    
また、式:
NSNumber *result = @(2+3*4);
も使用できます.
    NSArray
字面量構文を使用しない場合、配列を作成するのは通常次のようになります.
NSArray *aArray = [NSArray arrayWithObjects: [NSNumber numberWithInt:22], @"kuntzuo", @"hello", nil];

字面量文法があれば、このように書くことができます.
NSArray *aArray = @[@22, @"kuntzuo", @"hello"];

配列の字面量を作成する方法がより簡潔になり、カッコの前に字面量@記号を付けて内容を書き、終了フラグとしてnilを必要としなくなり、nilを削除しないと警告され、実行時にエラーが発生します.
     NSDictionary
NSDictionaryを作成する従来の方法は次のとおりです.
NSArray *keys   = [NSArray arrayWithObjects:@"Name", @"Sex", @"Age", nil];

NSArray *objects = [NSArray arrayWithObjects:@"kuntzuo", @" ", [NSNumber numberWithInt:22], nil];

NSDictionary *myProfile = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

//   

NSDictionary *myProfile = [NSDictionary dictionaryWithObjectsAndKeys:

                           @"kuntzuo ", @"Name",

                           @"  ", @"Sex",

                           [NSNumber numberWithInt:22], @"Age",

                           nil];

以上の2つの方法は簡単ではなく、混乱しやすいように見えます.字面量文法は私たちにもっと良いオプションを与えて、以下の書き方を見てください.
NSDictionary *myProfile = @{"Name":"kuntzuo","Sex":" ","Age":@22};

書きやすくてすっきりしているように見えますが、このような形式はよく知られているように見えますか?JavaScriptのようなオブジェクト?JSONみたい?どうせ便利だと思います.
文字通りの量でNSArray、NSNumber、NSDictionaryを作成する以外は.コレクションが可変タイプの場合
NSMutableArray、NSMutableDictionaryでは、新しいプロパティを使用して、集合内の値にアクセスおよび変更することもできます.次のコードは、この特性を簡単に示しています.
//     NSArray *aArray
NSArray *aArray = @[@22, @"kuntzuo", @"hello"];
NSMutableArray *mutableArray = [@[@22, @"kuntzuo", @"hello"] mutableCopy];

//      
NSString *greeting = [mutableArray objectAtIndex:2]; //"hello"
//     
NSString *greeting = mutableArray[2]; // "hello"
//     
mutableArray[2] = @"hello world";


//     NSDictionary
NSDictionary *myProfile = @{"Name":"kuntzuo","Sex":" ","Age":@22}
NSMutableDictionary *mutableDic = [myProfile mutableCopy];
//      
NSString *name = [mutableDic objectForKey:@"Name"]; // "kuntzuo"
//     
NSString *myName = mutableDic[@"Name"];//"kuntzuo"
//     
mutableDic[@"Name"] = @"kuntian zuo";

これが私の知っているLiteralsのすべての内容で、今も新しいものではありませんが、私たちはそれを把握する必要があります.私たちがコードを書くのに便利で、コードの可読性が高く、スタイルがもっと良いことができます.