iOS - 巧用字面量语法

简介: iOS - 巧用字面量语法

在编写代码时,总会遇到一些Foundation框架的类,分别是NSString,NSNumber,NSArray,NSDictionary。如你所见是我们最最经常用到的几个类,众所周知Object-C的语法友好中透露的是繁杂,所以现在有Swift来简化,但Swift还远没有Object-C成熟,这里只说字面量,为了简化这些Foundation框架的类,所以尽可能的使用字面量。


1.字面数值


为了把整数,浮点数,布尔类型放入对象中,我们多用NSNumber,按照语法我们会这么做:

NSNumber *myNumber = [NSNumber numberWithInt:10];

上面是把一个数字放入对象中,用字面量的话:

NSNumber *myNumber = @10;

如此简单,代码简洁明了,包括浮点数,字符:

NSNumber *myFloat = @10.f;
NSNumber *myChar = @'a';
NSNumber *myBool = @YES;

以上字面量非常有用,极大的简化了代码。


2.字面量数组


数组是常用的数据结构,不使用字面量要这么创建数组:

NSArray *myArray = [NSArray arrayWithObjects:@"one",@"two",@"three",nil];

使用字面量时这么创建:

NSArray *myArray = @[@"one",@"two",@"three"];

这种做法不仅简单,还易于操作,比如要取数组中第二个:

NSString *two = myArray[1];

通过下标就可以轻松取出来,而不需要使用很长的代码,如:

NSString *two = [myArray objectAtIndex:1];

但是在使用字面量时要注意一点,中间不能出现nil,否则会抛出异常,我们知道arrayWithObjects依次处理各个参数,直到nil结束,如果在中间位置出现一个nil,而我们不知情的话,数组中的元素就会只有nil之前的那些,使用字面量时对象是给定的,就不会出现为nil的情况,相对来说更为的安全。


3.字面量字典


字典中的是键值对,是一种映射型数据结构,正常创建时:

NSDictionary *myDic = [NSDictionary dictionaryWithObjectsAndKeys:@"Codeliu",@"myName",[NSNumber numberWithInt:26],@"myAge",nil];

很多人在写字典的时候都会遇到写反的情况,正常我们是键->对象,这里是对象->键,刚好是反的,这种写法不易读,改用字面量的话:

NSDictionary *myDic = @{@"myName":@"Codeliu",@"myAge":@26};

不仅有冒号一一对应,就连顺序也是合理的,非常好看懂。而且你会看到年龄直接是以对象的形式放进去的,与数组一样的一点是,一旦发现nil的键值就会立刻停止。


在访问字典时,传统做法是:

NSString *myName = [myDic objectFoeKey:@"myName"];

字面量的做法是:

NSString *myName = myDic[@"myName"];

是不是觉得简明易懂,更易读了呢。


4.可变数组与字典


当数组和字典的对象是可变的时,也可以通过访问下标的方法来修改和访问其中的元素。修改可变数组和字典中元素:

[mutableArray replaceObjectAtIndex:0 withObject:@"one1"];
[mutableDic setObject:@"CodingFire" forKey:@"myName"];

用字面量取下标操作如下:

mutableArray[0] = @"one1";
mutableDic[@"myName"] = @"CodingFire";


5.字面量的局限性


虽然字面量有如上很多作用和好处,但字面量并不是万能的,除字符串外,若是自定义了这些类的子类,则无法用字面量语法创建其对象,只能使用传统的方法了,因为NSArray,NSDictionary,NSNumber都是已经定型的“子族”,所以很少会有人来定义其子类,也没有那个必要,另外,字面量语法创建出来的字符串,数组,字典都是不可变的,如果想要其可变,需要复制一份:

NSMutableArray *mutableArray = [@[@"one",@"two",@"three",nil]mutableCopy];

虽然这样会多调用一个方法并创建了一个对象,但是其好处不容置疑。


注:对于用来存储不确定元素数量的解析数据,还是需要用传统方法。

目录
相关文章
|
缓存 JavaScript iOS开发
iOS 逆向编程(十四)Cycript 语法入门
iOS 逆向编程(十四)Cycript 语法入门
197 0
|
缓存 JavaScript iOS开发
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
iOS 逆向编程(十五)Cycript 语法进阶(封装 .cy 脚本文件)
191 0
|
安全 iOS开发
iOS开发 - 字面语法之数组注意事项
iOS开发 - 字面语法之数组注意事项
85 0
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(二)
【IOS 开发】Objective - C 语法 之 流程控制(二)
163 0
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(一)
【IOS 开发】Objective - C 语法 之 流程控制(一)
144 0
|
iOS开发
【iOS 开发】Objective - C 语法 之 类型转换
【iOS 开发】Objective - C 语法 之 类型转换
408 0
|
程序员 C语言 C++
《企业级ios应用开发实战》一第3章 Objective-C 语法简介
本节书摘来自华章出版社《企业级ios应用开发实战》一 书中的第3章,第3.1节,作者:杨宏焱,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1668 0
|
存储 iOS开发
iOS - C 基本语法
1、数据类型 2、常量 1)凡是整数数字常量一律是 int 型。 2)typedef 和 define。 typedef 定义类型, #define 只是字符串替换。 3)在编写整形常量时,可以在常量的后面加上符号 L 或者 U 进行修饰。
1014 0