#Objective - C - 字面量(Literals)整理
2015-12-26 11:32
393 查看
今天整理一下关于Objective-C Literals的内容,Literals翻译成字面量或者字面值,就是直接被写到源代码中的值。这不是一个陌生的概念,我们在写程序的时候能频繁的见到。我们很早就见过NSString 字面量了:
它的语法很简单,上面的代码就是通过在C字符串的前面加上@符号创建了一个NSString对象greeting,整段代码看起来简洁易懂,如果没有直接量语法,那么创建这个greeting可能就要使用下面的方法了:
在Xcode4.4和LLVM4.0之后,一些新特性被提出来,其中一个就是对NSNumber、NSArray和NSDictionary使用字面量语法。
那么现在就可以这样写:
当然这里不仅对于 -numberWithInt:适用,对于其他的也同样适用:
除此之外,你还可以用表达式:
而有了字面量语法之后,就可以这样写:
创建数组的字面量的方式变得更加简洁了,在方括号前面加上字面量@符号 ,里面写上内容,而且不再需要nil作为结束标志了,如果没有去掉nil会得一个警告,运行时会报错。
以上两种方法看起来都不简单,而且容易混乱。字面量语法给我们更好的可选项,看看下面写法:
写起来方便看起来爽有木有,这样的形式看起来是不是很熟悉呢?像JavaScript的对象?像JSON?反正我觉得方便很多啦。
除了用字面量来创建NSArray、NSNumber、NSDictionary之外。如果集合是可变类型如
NSMutableArray、NSMutableDictionary,新特性还允许你用下标的方式来访问和修改集合中的值。下面的代码简单演示了这一特性。
//对于上面的NSArray *aArray
这就是我所了解的Literals的全部内容,虽然现在也不算新东西了,不过我们掌握它还是很有必要的,既方便我们写代码,也可以是代码的可读性更高,风格更好。
NSString
NSString *greeting = @"Hello World";
它的语法很简单,上面的代码就是通过在C字符串的前面加上@符号创建了一个NSString对象greeting,整段代码看起来简洁易懂,如果没有直接量语法,那么创建这个greeting可能就要使用下面的方法了:
NSString *greeting = [NSString stringWithUTF8String:"Hello World"];
在Xcode4.4和LLVM4.0之后,一些新特性被提出来,其中一个就是对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];
以上两种方法看起来都不简单,而且容易混乱。字面量语法给我们更好的可选项,看看下面写法:
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的全部内容,虽然现在也不算新东西了,不过我们掌握它还是很有必要的,既方便我们写代码,也可以是代码的可读性更高,风格更好。
相关文章推荐
- 你必须知道的Javascript知识点之"字面量和对应类型"说明介绍
- JavaScript中用字面量创建对象介绍
- javascript的数据类型、字面量、变量介绍
- Objective-C的内省(Introspection)用法小结
- JavaScript中字面量与函数的基本使用知识
- Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析
- Objective-C中NSNumber与NSDictionary的用法简介
- Objective-C中NSLog输出格式大全
- 全面解析Objective-C中的block代码块的使用
- Swift调用Objective-C编写的API实例
- Swift、Objective-C、Cocoa混合编程设置指南
- Objective-c代码如何移植为Swift代码 Objective-c代码转移到Swift过程介绍
- Swift调用Objective-C代码
- 以实例讲解Objective-C中的KVO与KVC机制
- objective-c中生成随机数的方法
- 在Swift中使用Objective-C编写类、继承Objective-C类
- Swift能代替Objective-C吗?
- Objective-C 消息传递机制详解
- 在一个项目中同时使用Swift和Objective-C代码混合编程的方法
- vm安装mac os x 10.7 lion