Objective-c Literals语法(网上翻译为字面量,我称之为@语法 at符号语法)

Literals(字面语法)

字面语法是的编译器指令,它提供简化符号来创建对象。


NSString:
  • ?
    1
    NSString  *greeting = @ "Hello World" ;

        它的语法很简单,上面的代码就是通过在C字符串的前面加上@符号创建了一个NSString对象greeting,整段代码看起来简洁易懂,如果没有直接量语法,那么创建这个greeting可能就要使用下面的方法了:

    ?
    1
    NSString *greeting = [NSString stringWithUTF8String: "Hello World" ];

        在Xcode4.4和LLVM4.0之后,一些新特性被提出来,其中一个就是对NSNumber、NSArray和NSDictionary使用字面量语法。

        NSNumber:

        在新特性提出来之前,我们要创建的一个NSNumber对象可能是这样的:

    ?
    1
    NSNumber  *aNumber = [NSNumber  numberWithInt:22];

        那么现在就可以这样写:

    ?
    1
    NSNumber  *aNumber = @22;

        当然这里不仅对于 -numberWithInt:适用,对于其他的也同样适用:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //不用字面量的方式:
    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;
         除此之外,你还可以用表达式:
    ?
    1
    NSNumber *result = @(2+3*4);

        NSArray

        不使用字面量语法的时候,创建一个数组通常是这样的:

    ?
    1
    NSArray *aArray = [NSArray arrayWithObjects: [NSNumber numberWithInt:22], @ "kuntzuo" , @ "hello" , nil];

        而有了字面量语法之后,就可以这样写:

    ?
    1
    NSArray *aArray = @[@22, @ "kuntzuo" , @ "hello" ];

        创建数组的字面量的方式变得更加简洁了,在方括号前面加上字面量@符号 ,里面写上内容,而且不再需要nil作为结束标志了,如果没有去掉nil会得一个警告,运行时会报错。

         NSDictionary

         创建一个NSDictionary的传统方式是这样:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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];

         以上两种方法看起来都不简单,而且容易混乱。字面量语法给我们更好的可选项,看看下面写法:

    ?
    1
    NSDictionary *myProfile = @{ "Name" : "kuntzuo" , "Sex" : "男" , "Age" :@22};

         写起来方便看起来爽有木有,这样的形式看起来是不是很熟悉呢?像JavaScript的对象?像JSON?反正我觉得方便很多啦。


         除了用字面量来创建NSArray、NSNumber、NSDictionary之外。如果集合是可变类型如

    NSMutableArray、NSMutableDictionary,新特性还允许你用下标的方式来访问和修改集合中的值。下面的代码简单演示了这一特性。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    //对于上面的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" ;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值