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);
时间: 2024-08-29 08:42:36

Objective-C中的语法糖的相关文章

看看C# 6.0中那些语法糖都干了些什么(上篇)

今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL?   一:自动初始化属性      确实这个比之前的版本简化了一下,不过你肯定很好奇,到底编译器给我们做了哪些东西呢? 1 class Student 2 { 3 public string Name { get; set; } = "ctrip"; 4 }   从这张图中可以看到,在ctor中<Name>k__backingfield=&qu

看看C# 6.0中那些语法糖都干了些什么(中篇)

接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲.   一:字符串嵌入值 我想String.Format方法就是化成灰大家都认识,比如下面代码: class Bird { private string Name = "swallow"; public void Fly() { var result = string.Format("hello {0}&

语法糖(Syntactic sugar)

语法糖(Syntactic sugar),是由Peter J. Landin(和图灵一样的天才人物,是他最先发现了Lambda演算,由此而创立了函数式编程)创造的一个词语,它意指那些没有给计算机语言添加新功能,而只是对人类来说更"甜蜜"的语法.语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读.不过其并没有给语言添加什么新东西.   也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用.通常来说,使用语法糖能够增加程序的可

c#中IEnumerable简单实现及 yield return 语法糖

c#中IEnumerable简介及简单实现 IEnumerable这个接口在MSDN上是这么说的,它是一个公开枚举数,该枚举数支持在非泛型集合上进行简单的迭代.换句话说,对于所有数组的遍历,都来自IEnumerable,那么我们就可以利用这个特性,来定义一个能够遍历字符串的通用方法. 下面先贴出code.  代码如下 复制代码 using System;using System.Collections.Generic;using System.Linq;using System.Text;usi

Visual Basic 9不完全入门之语法糖

引言 在Visual Basic 9 Beta 1中,有着LINQ这样重量级的增强,也有着一些"微不足道的"语法糖.这些语法糖并不影响最终编译出的IL,但足以减轻程序员们的工作量,实现更高效,更轻松的开发. 语法糖有哪些? 1.局部变量类型推测 2.数组初始化器 3.对象初始化器 语法糖好吃吗? 个人认为,这些语法糖还是比较美味的.对象初始化器就很不错:局部变量类型推测也相当好用. 语法糖怎么吃? 1.局部变量类型推测 Visual Basic 9之前,只能用As语句定义一个强类型对象

BLOCK/字面量(语法糖)OC——第六天

1.//block ,块语法,实质是匿名函数,是对C语言中函数的扩充,扩展:     //block  语法可以用来保存一段代码或者用来调用一段封装好的代码:     //block  语法由于是C语言实现的,所以执行效率特别高:     //block 语法由来,借鉴了函数指针的语法 //block 的数据类型     /* 2.     返回值类型(^)(参数类型1,参数类型2,....):      注意:1.如果要定义的block没有参数,()也不能省掉                 

Java语法糖之foreach

  语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用了.这些语法糖虽然不会提供实质性的功能改进,但是它们或能提高性能.或能提升语法的严谨性.或能减少编码出错的机会.Java提供给了用户大量的语法糖,比如泛型.自动装箱.自动拆箱.foreach循环.变长参数.内部类.枚举类.断言(assert)等.   本篇主要是讲解foreach,foreach的语法经过

C#语法糖(Csharp Syntactic sugar)大汇总_C#教程

1. 经过简化的Property 早些时候我们这样声明Property 复制代码 代码如下: private string _myName; public string MyName { get { return _myName; } set { _myName = value; } } 千篇一律的这样声明,没有多大意义,于是C#的设计人员将这个千篇一律的工作交给了编译器帮我们做了,我们现在可以这样声明 复制代码 代码如下: public string MyName { get; set; }

c语言基础-C语言基础中的语法问题

问题描述 C语言基础中的语法问题 下面是我写的代码,是一个加密的过程,运行了几遍都有语法错误,请高手在空闲之余能帮我看下是哪里错了,万分感谢 #include<stdio.h>#include<string.h>void main(){void m(*int); char a[50]*p; int l; scanf(""%s""a); l=strlen(a); p=a; m(pl); printf(""%s"&q