Objective-C中的语法糖

简介:

 写这篇博客源于一个疑问:“WoK~, 这也行?!”。刚接触OC不久,今天做深浅拷贝的测试,无意中把获取NSArray的值写成了用下标获取的方式。当时把注意力放在了深浅拷贝的内存地址分析上了,就没太在意,测试做完啦,在回顾的时候发现数组是用下标的方式获取的! 于是就有了个疑问,在OC中这样写也行?不是NSArray中有一个方法叫做objectAtIndex来专门获取数组的元素嘛,嗯~用下标也行?此时心里窃喜,可以简化一下数组访问元素的方式了,又可以偷懒啦!!为了更好的偷懒,于是去百度上Google啦一下这是‘ Xcode 4.4中LLVM compiler 4.0’ 引入的新特性(2012年WWDC发布的东西)。到这小菜本人就有柳暗花明又一村的感觉啦~就可以好好的偷一下懒啦~于是系统的总结了一下引入的新的特性,话不多说,Coder说话哪能少的了code呢!ludashi~走起~(虽然是12年的东西,这不刚学蛮~在OC中用感觉挺新鲜的,简化后对字典的初始化感觉和PHP有点相似~感觉见到亲人啦~)

  问题是数组引起的那么就从数组开始吧

  1.一般数组的初始化和访问数组元素是这样的

    在之前的博客中我是这样初始化NSArray的:

1 //NSArray的便利初始化
2 NSArray *array1 = [[NSArray alloc] initWithObjects:@"aaa", @"bbb", @"ccc", nil];
3 //NSArray的便利构造器
4 NSArray *array2 = [NSArray arrayWithObjects:@"111", @"222", @"333", nil];

    获取数组的元素
//获取相应索引的元素
id element = [array1 objectAtIndex:0];
NSLog(@"array1_count = %d, array[0] = %@", count, element);

   简化后的数组初始化和访问的做法如下
//NSArray的定义
        NSArray *array = @[@"lu", @"da", @"shi", @YES, @123];
        int count = (int)[array count];
        
        for (int i = 0; i < count; i++)
        {
            NSLog(@"%@", array[i]);
        }

 

  2.对字典(NSDictionary)的简化

    也引用我之前博客中得一段代码吧

//不可变字典的初始化
NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
id value = [dictionay objectForKey:@"key1"];
NSLog(@"key1 => %@", value);

   我们还可以这样做
//NSDictionary的定义简化
        NSDictionary *dictionary = @{
                                     @"key0" : @"value0",
                                     @"key1" : @"value1",
                                     @"key2" : @"value2"
                                     };
        NSLog(@"key2 => %@", dictionary[@"key2"]);

 

   3.对NSNumber简化

    我们可以这样做

​    ​    ​    ​把基本类型包装成对象的便利构造函数

    ​    ​    ​    ​    ​-(id) initWithChar : (char) value;

    ​    ​    ​    ​    ​-(id) initWithInt : (int) value;

    ​    ​    ​    ​    ​-(id) initWithFloat : (float) value;

    ​    ​    ​    ​    ​-(id) initWithBool: (BOOL) value;

    ​    ​    ​    ​把基本数据类型包装成对象的便利构造器

    ​    ​    ​    ​    ​+(id) numberWithChar : (char) value;

    ​    ​    ​    ​    ​+(id) numberWithInt : (int) value;

    ​    ​    ​    ​    ​+(id) numberWithFloat : (float) value;

    ​    ​    ​    ​    ​+(id) numberWithBool : (BOOL) value;

  

  我们也可以这样做,说明:在char转换为NSNumber是存的是ASCII码的形式,c输出为97

//NSNumber的简化
NSNumber *a = @123;
NSNumber *b = @11.2;
NSNumber *c = @('a');
NSLog(@"a = %@, b = %@, c = %@", a, b, c);

相关文章
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(二)
【IOS 开发】Objective - C 语法 之 流程控制(二)
161 0
|
iOS开发
【IOS 开发】Objective - C 语法 之 流程控制(一)
【IOS 开发】Objective - C 语法 之 流程控制(一)
142 0
|
iOS开发
【iOS 开发】Objective - C 语法 之 类型转换
【iOS 开发】Objective - C 语法 之 类型转换
400 0
|
存储 Java 程序员
C++ 开发者快速学习 Objective-C 语言核心语法
本文将讨论 Objective-C 语言的核心语法。这部分开始详述一些具体的语法。正如你期待的一样,涉及到了定义和类。
253 0
|
C++ iOS开发 开发者
C++开发者快速学习Objective-C语言核心语法
  本文将Objective-C讨论了语言的核心语法。这部分开始详述一些具体的语法。正如你期待的一样,涉及到了定义和类。   类并不是特殊的   在Smalltalk中,类是具有一些特性的对象。在Objective-C中也一样。
970 0
|
C++ iOS开发 开发者
C++开发者快速学习Objective-C语言核“.NET研究”心语法
  本文将Objective-C讨论了语言的核心语法。这部分开始详述一些具体的语法。正如你期待的一样,涉及到了定义和类。   类并不是特殊的   在Smalltalk中,类是具有一些特性的对象。在Objective-C中也一样。
957 0
|
程序员 C# iOS开发
|
程序员 C语言 C++
《企业级ios应用开发实战》一第3章 Objective-C 语法简介
本节书摘来自华章出版社《企业级ios应用开发实战》一 书中的第3章,第3.1节,作者:杨宏焱,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1655 0