最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Objective-C中的語法糖示例詳解

 更新時間:2018年01月05日 09:45:45   作者:周強  
開發(fā)過程中我特別喜歡用語法糖,原因很簡單,懶得看到一堆長長的代碼,但語法糖簡單卻不那么簡單,下面這篇文章主要給大家介紹了關于Objective-C中語法糖的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。

語法糖

語法糖(Syntactic sugar),也譯為糖衣語法,是由英國計算機科學家彼得·約翰·蘭達(Peter J. Landin)發(fā)明的一個術語,指計算機語言中添加的某種語法,這種語法對語言的功能并沒有影響,但是更方便程序員使用。

——維基百科

需要聲明的是“語法糖”這個詞絕非貶義詞,它可以給我?guī)矸奖悖且环N便捷的寫法,編譯器會幫我們做轉換;而且可以提高開發(fā)編碼的效率。

通常來說使用語法糖能夠增加程序的可讀性,從而減少程序代碼出錯的機會,本文在簡單的介紹 OC 語法糖的同時也會跟大家分享下我們使用過程中發(fā)現(xiàn)的'新'問題。下面話不多說了,來一起看看詳細的介紹吧。

語法糖的自白

先舉個生活中的🌰:

  • 老班:為了傳達教育局和學校的教育精神我來講幾句。
  • 老班:下面我要講啦啊。
  • 老班:我要講的是教育局和學校剛傳達的規(guī)定。
  • 老班:最近校長發(fā)現(xiàn)遲到學生越來越多。
  • 老班:為了維護教學秩序,學校制定了新校規(guī)。
  • 老班:.....
  • 小明:說人話!
  • 老班:從明天起7點鐘準時到校上課!

老班巴拉巴拉講了一堆,其實只是要表達*從明天起 7 點鐘準時到校上課!*雖然最終能表達出效果,但是老班說的累小明們聽著也煩。舉這個例子可能比較極端,至少我沒有遇到這么啰嗦的老師。但在編程語言中的確有不少讓程序員感到羅嗦的語法,讓人不能忍,這個時候語法糖 就派上了用場。

比如OC取數組元素:

id element = [array1 objectAtIndex:0];

OC 語法糖:你看,我是不是寫起來很方便?

id element = array1[0];

OC 語法糖:往下看,我還能做更多呢。

OC語法糖

@[] 和 @{}

NSArray

一般數組的初始化和訪問數組元素是這樣的:

// NSArray 的 alloc 初始化
NSArray *array1 = [[NSArray alloc] initWithObjects:@"a", @"b", @"c", nil];
// NSArray 的便捷構造
NSArray *array2 = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];

獲取數組中的元素可以這樣的:

// 獲取相應索引的元素
id element = [array1 objectAtIndex:0];
NSLog(@"array1_count = %d, array[0] = %@",[array1 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]);
}

NSDictionary

字典的初始化一般是這樣的:

NSDictionary *dictionay = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
id value = [dictionay objectForKey:@"key1"];
NSLog(@"key1 => %@", value);

我們還可以這樣簡化:

NSDictionary *dictionary = @{
    @"key0" : @"value0",
    @"key1" : @"value1",
    @"key2" : @"value2"
    };
NSLog(@"key2 => %@", dictionary[@"key2"]);

事實上 [ ] 和 { } 在JSON數據格式中最常見了,[ ] 一般封裝一個數組,{ } 一般封裝一個整體對象。

NSNumber

一般寫法是這樣的:

NSNumber *intNumber = [NSNumber numberWithInt:123];
NSNumber *floatNumber = [NSNumber numberWithFloat:12.3];
NSNumber *charNumber = [NSNumber numberWithChar:@('a')];

語法糖簡化寫法:

NSNumber *a = @123;
NSNumber *b = @12.3;
NSNumber *c = @('a');
NSLog(@"a = %@, b = %@, c = %@", a, b, c);

. 點語法

再用數組 NSArray *array = @[@"lu", @"da", @"shi", @YES, @123]; 舉例。想要獲取數組中有多少個元素,我們平時都是怎么做的?

[array count] 還是 array.count?

老司機們思索片刻后說到:好像都用過,但是...我們知道在 OC 中 [] 和 . 分別代表調用方法和屬性,看申明明明是屬性呀,怎么可以用 . 方法?

從 OC 2.0 開始只要符合系統(tǒng)默認 setter、getter 書寫格式的方法都可以使用. 點語法,屬性是一對 getter、setter 方法,點語法是屬性的另一種調用格式,就是語法糖方法。這么做的目的只有一個,就是增加可讀性、兼容常見用法減少代碼報錯!

OC語法糖帶來的'坑'

一般我們認為語法糖帶來了方便,特別是對于字典的初始化 直接是key:value的賦值方式比 dictionaryWithObjectsAndKeys 這種反人類的方式友好的多。

但真的沒有其他什么問題嗎?看下下面兩個定義及運行結果:


可見 dictionaryWithObjectsAndKeys 如果遇到 value 為 nil 的情況,后續(xù) key-value 不會入庫直接當做末尾 nil 結束初始化;

而語法糖的方式就直接崩潰了,對崩潰了。

所以使用語法糖還需要注意數據合法性問題,nil 會造成意外的崩潰哦!

基本原理

語法糖就是語言中的一個構件,當去掉該構件后并不影響語言的功能和表達能力。而使用語法糖語言的處理器,包括編譯器,靜態(tài)分析器等,會在處理之前把語法糖構件轉換成加糖之前的構件,這個過程通常被稱為:desugaring。說白了,語法糖就是對現(xiàn)有語法的一個封裝,編譯運行的時候再脫掉這層糖衣變?yōu)槔系恼Z法實現(xiàn)。

寫在最后

之所以叫「語法」糖,不只是因為加糖后的代碼功能與加糖前保持一致,更重要的是糖在不改變其所在位置的語法結構的前提下,實現(xiàn)了運行時等價。可以簡單理解為,加糖后的代碼編譯后跟加糖前一摸一樣。

之所以叫語法「糖」,是因為加糖后的代碼寫起來很爽,包括但不限于:代碼更簡潔流暢,代碼更語義自然,寫得爽,看著爽!

「糖」也可能有毒,使用需謹慎。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • iOS仿AirPods彈出動畫

    iOS仿AirPods彈出動畫

    這篇文章主要為大家詳細介紹了iOS仿AirPods彈出動畫的實現(xiàn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • iOS 圖片旋轉方法實例代碼

    iOS 圖片旋轉方法實例代碼

    這篇文章主要介紹了iOS 圖片旋轉方法實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • iOS 標簽Tag列表的實現(xiàn)代碼

    iOS 標簽Tag列表的實現(xiàn)代碼

    這篇文章主要介紹了本篇文章主要介紹了iOS 標簽Tag列表的實現(xiàn)代碼,非常具有實用價值,需要的朋友可以參考下
    2017-04-04
  • IOS使用progssview仿滴滴打車圓形計時

    IOS使用progssview仿滴滴打車圓形計時

    本文給大家分享的是IOS中實現(xiàn)仿滴滴打車的原型計時效果,非常的實用,有需要的小伙伴可以參考下。
    2015-07-07
  • iOS MRC 下 block 循環(huán)引用問題實例講解

    iOS MRC 下 block 循環(huán)引用問題實例講解

    本文通過文字說明加代碼的形式給大家介紹了iOS MRC 下 block 循環(huán)引用問題,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-12-12
  • iOS開發(fā)之運動事件和遠程控制

    iOS開發(fā)之運動事件和遠程控制

    在iOS中事件分為三類:觸摸事件:通過觸摸、手勢進行觸發(fā)(例如手指點擊、縮放),運動事件:通過加速器進行觸發(fā)(例如手機晃動),遠程控制事件:通過其他遠程設備觸發(fā)(例如耳機控制按鈕)今天我們來詳細探討下運動事件和遠程控制
    2016-04-04
  • iOS中NSNumberFormatter的介紹與用法

    iOS中NSNumberFormatter的介紹與用法

    NSNumberFormatter 應該可以滿足你對數據形式的一般需求,值得了解一下,下面這篇文章主要給大家介紹了關于iOS中NSNumberFormatter的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-09-09
  • IOS給圖片添加水?。▋煞N方式)

    IOS給圖片添加水?。▋煞N方式)

    為了防止自己辛苦做的項目被別人盜走,采取把圖片添加水印,在此表示圖片的獨一無二。加水印不是要在上面添加上幾個Label,而是我們要把字畫到圖片上成為一個整體,下面這篇文章主要介紹IOS給圖片添加水印,有需要的小伙伴可以來參考下
    2015-08-08
  • iOS開發(fā)之視圖切換

    iOS開發(fā)之視圖切換

    在iOS開發(fā)中視圖的切換是很頻繁的,獨立的視圖應用在實際開發(fā)過程中并不常見,除非你的應用足夠簡單。在iOS開發(fā)中常用的視圖切換有三種,今天我們將一一介紹,希望大家能夠喜歡。
    2016-04-04
  • IOS 中XAMPP配置問題及解決方法

    IOS 中XAMPP配置問題及解決方法

    這篇文章主要介紹了IOS 中XAMPP配置問題及解決方法的相關資料,需要的朋友可以參考下
    2017-06-06

最新評論

张家港市| 临夏县| 瓮安县| 双鸭山市| 麟游县| 长顺县| 扶沟县| 青川县| 西安市| 久治县| 桦甸市| 广东省| 河源市| 沾化县| 平江县| 石渠县| 云林县| 百色市| 武清区| 准格尔旗| 任丘市| 克拉玛依市| 安达市| 华宁县| 石景山区| 鸡泽县| 左贡县| 宿松县| 长治县| 师宗县| 高邑县| 华阴市| 邹城市| 青田县| 龙泉市| 辛集市| 宣汉县| 德化县| 仁布县| 方正县| 云阳县|