您的位置:首页 > 移动开发 > Objective-C

Xcode 4.4中LLVM compiler 4.0带来的Objective-C新语法特性

2014-08-14 16:08 393 查看
下面的语法需要下载Xcode 4.4。

1、枚举类型的改变

老写法:

[cpp] view plaincopy

typedef enum Week{

Moday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday,

Sunday

}Week;

老方法的问题是枚举值的数据范围是模糊的,这个数值可能非常大,可能是负数,无法界定

新写法:

[cpp] view plaincopy

typedef enum Week:NSUInteger{

Moday,

Tuesday,

Wednesday,

Thursday,

Friday,

Saturday,

Sunday

}Week;

新方法在列出枚举内容的同时绑定了枚举数据类型NSUInteger,这样带来的好处是增强的类型检查和更好的代码可读性。

2、使用的方法代码放置的位置顺序无关

没在.h文件中声明的方法,在时候的时候如果方法不在前面,可能会有警告。

比如:

[cpp] view plaincopy

@interface MyClass : NSObject

-(void)doSomething:(NSString *) print;

@end

实现:

[cpp] view plaincopy

@implementation MyClass

-(void)doSomething:(NSString *)print{

NSLog(@"%@", [print stringByAppendingFormat:[self getString]]);

}

-(NSString *)getString{

return@"string for something";

}

@end

早期编译器编译时会出现:warning: instance method ‘-getString:’ not found…

新的编译器会先扫描代码中的方法,然后再编译,这样就避免了找不到方法这种情况了

3、property属性简化

@property对于使用Objective-C的程序员来说是相当熟悉的,property方便自动生成变量的getter和setter。在.h文件中声明之后,还要在.m文件中加上@synthesize关键字,这样才能完成自动getter和setter的过程。

比如说,我在.h文件中写了

@property (strong, nonatomic) NSDictionary *order;

我还要去对于的.m文件中写上

@synthesize order;

是不是感觉很多余啊?现在在语法新特性中不用写这行代码了,新版的编译器帮你实现这行代码,这叫帮人帮到底。

也是说,你在.h文件中声明order属性后,就可以直接在实现文件中使用该属性的getter和setter方法,编译器还会根据属性的可读和可写自动判断是否提供setter方法。智能多了。

4、语法的简化

做过java 或C#开发的都知道,初始化一个变量一般用一个“=”号就搞定了,到了Objective-C后,每次都要用一个很长的函数才能初始化赋值。现在简化多了。不是初始化的赋值,下面的方法不行的)

咱们看看各个数据类型简化前后的对比。

4.1、NSNumber 类型

老写法:

[cpp] view plaincopy

NSNumber *number;

number = [NSNumber numberWithChar:'X'];

number = [NSNumber numberWithInt:12345];

number = [NSNumber numberWithUnsignedLong:12345ul];

number = [NSNumber numberWithLongLong:12345ll];

number = [NSNumber numberWithFloat:123.45f];

number = [NSNumber numberWithDouble:123.45];

number = [NSNumber numberWithBool:YES];

新写法:

[cpp] view plaincopy

NSNumber *number;

number = @'X';

number = @12345;

number = @12345ul;

number = @12345ll;

number = @123.45f;

number = @123.45;

number = @YES;

4.2、NSArray类型

老写法:

[cpp] view plaincopy

NSArray *array;

array = [NSArray arrayWithObjects:@"object1", @"object2", @"object3", nil];

新写法:

[cpp] view plaincopy

NSArray *array = @[ @"object1", @"object2", @"object3" ];

新的写法去掉了后面讨厌的nil。

4.3、NSDictionary类型

老写法

[cpp] view plaincopy

NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"value1", @"value2", @"value3"]

forKeys:@[@"key1", @"key2", @"key3"]];

新写法

[cpp] view plaincopy

NSDictionary *dict = @{@"key1": @"value1",@"key2": @"value2",@"key3": @"value3" };

NSLog(@"%@", dict);

运行结果正常:

{

key1 = value1;

key2 = value2;

key3 = value3;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: