2014年3月11日火曜日

Objective-C リテラル構文備忘録(Objective-C Literals)

Objective-Cリテラル構文備忘録
NSNnumber
特筆することは無いが、@(expression)には注意。
    //NSNumber literals
    
    //bool
    //NSNumber *boolYesValue = [NSNumber numberWithBool:YES];
    NSNumber *boolYesValue = @YES;
    NSLog(@"%@", boolYesValue); // 1
    //NSNumber *boolNoValue = [NSNumber numberWithBool:NO];
    NSNumber *boolNoValue = @NO;
    NSLog(@"%@", boolNoValue); // 0
    
    //char
    //NSNumber *charValue = [NSNumber numberWithChar:'Z'];
    NSNumber *charValue = @'Z';
    NSLog(@"%c", [charValue charValue]); // Z
    
    //double
    //NSNumber *doubleValue = [NSNumber numberWithDouble:3.14];
    NSNumber *doubleValue = @3.14;
    NSLog(@"%f", [doubleValue doubleValue]); //3.140000
    
    //float
    //NSNumber *floatValue = [NSNumber numberWithFloat:3.14F];
    NSNumber *floatValue = @3.14F;
    NSLog(@"%f", [floatValue floatValue]); //3.140000
    
    //signed int
    //NSNumber *intValue = [NSNumber numberWithInt:INT_MAX];
    NSNumber *intValue = @INT_MAX;
    NSLog(@"%d", [intValue intValue]); // 2147483647
    
    //unsigned int
    //NSNumber *uintValue = [NSNumber numberWithUnsignedInt:UINT32_MAX];
    NSNumber *uintValue = @UINT32_MAX;
    NSLog(@"%u", [uintValue unsignedIntValue]); // 4294967295
    
    //signed long
    //NSNumber *longValue = [NSNumber numberWithLong:LONG_MAX];
    NSNumber *longValue = @LONG_MAX;
    NSLog(@"%ld", [longValue longValue]); // 2147483647
    
    //unsigned long
    //NSNumber *ulongValue = [NSNumber numberWithUnsignedLong:LONG_MAX];
    NSNumber *ulongValue = @LONG_MAX;
    NSLog(@"%ld", [ulongValue unsignedLongValue]); // 2147483647
    
    //long long
    //NSNumber *longlongValue = [NSNumber numberWithLongLong:LONG_LONG_MAX];
    NSNumber *longlongValue = @LONG_LONG_MAX;
    NSLog(@"%lld", [longlongValue longLongValue]); // 9223372036854775807
    
    //expressions
    //NSNumber *expValue = [NSNumber numberWithInt:INT_MAX-1];
    NSNumber *expValue = @(INT_MAX-1);
    NSLog(@"%d", [expValue intValue]); // 2147483646
NSArray
配列のリテラル構文の場合、nilを指定することは出来ないことに注意。 また、リテラル構文で作成されるオブジェクトはimmutableなインスタンスなので、 値を変更したい場合はmutableCopyしてNSMutableArrayを取得する。
    //Array literals
    
    //NSArray *array = [NSArray arrayWithObjects:@1, @2, @3, nil];
    NSArray *array = @[@1, @2, @3];
    NSLog(@"%@", array); // (1, 2, 3)
    
    //添え字アクセス
    //NSNumber *number = [array objectAtIndex:0];
    NSNumber *number = array[0];
    NSLog(@"%@", number); // 1
    
    //添え字による値設定
    NSMutableArray *mutableArray = [@[@1, @2, @3] mutableCopy];
    mutableArray[0] = @10;
    NSLog(@"%@", mutableArray[0]); // 10
NSDictionary
リテラル構文の場合はインスタンスメソッドの順とは異なり、キー、値の順で指定することに注意。 mutableCopyの件は配列の時と一緒。

    //Dictionary literals
    
    //NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@1, @"one", @2, @"two", @3, @"three", nil];
    NSDictionary *dictionary = @{@"one" : @1,
                                 @"two" : @2,
                                 @"three" : @3};
    NSLog(@"%@", dictionary); // {one = 1; two = 2; three = 3;}
    
    //添え字によるアクセス
    NSNumber *numberValue = dictionary[@"one"];
    NSLog(@"%@", numberValue);
    
    //添え字による値設定
    NSMutableDictionary *mutableDictionary = [@{@"one" : @1, @"two" : @2, @"three" : @3} mutableCopy];
    mutableDictionary[@"one"] = @1.1;
    NSLog(@"%@", mutableDictionary[@"one"]); // 1.1
NSString
Cスタイルの型をNSStringへ変換することが@(expression)表現で可能になっている事に注意。
    //String literals
    NSString *stringValue = @"string value";
    NSLog(@"%@", stringValue);
    
    //CスタイルからのNSString生成
    static const char * const C_CONST_STRING = "CONST STRING";
    //NSString *c_string = [NSString stringWithCString:C_CONST_STRING encoding:NSUTF8StringEncoding];
    //NSString *c_string = [NSString stringWithUTF8String:C_CONST_STRING];
    NSString *c_string = @(C_CONST_STRING);
    NSLog(@"%@", c_string);

0 件のコメント :

コメントを投稿