轉(zhuǎn)帖|對(duì)比評(píng)測(cè)|編輯:龔雪|2014-06-04 09:37:18.000|閱讀 2249 次
概述:WWDC 2014上蘋果推出了新的編程語言Swift( 雨燕 )代替Objective-C,Swift語言與Objective-C有何不同呢,今天我們對(duì)兩者進(jìn)行一個(gè)對(duì)比。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
WWDC 2014上蘋果再次驚世駭俗的推出了新的編程語言SWIFT( 雨燕 ), 這個(gè)消息會(huì)前沒有半點(diǎn)風(fēng)聲的走漏。消息發(fā)布當(dāng)時(shí),會(huì)場(chǎng)一片驚呼,相信全球看直播的碼農(nóng)們當(dāng)時(shí)也感覺腦袋被敲了一記悶棍吧( 至少我當(dāng)時(shí)是這樣的于是熬夜學(xué)習(xí)了SWIFT大法,越看越想高呼 " SWIFT大法好!"
個(gè)人愚見:swift語言替代objective-c只是時(shí)間問題( 這個(gè)時(shí)間不會(huì)太長 )
空說無憑,程序員,最講究的就是實(shí)事求是和客觀,下面就開始對(duì)比兩種語言。
首先要強(qiáng)調(diào)的是,swift絕對(duì)不是解釋性語言,更不是腳本語言,它和objective-c,c++一樣,編譯器最終會(huì)把它翻譯成C語言,也就是說編譯器最終面對(duì)的其實(shí)都是C語言代碼( 這是千真萬確,不容置疑的!!!所以不要看它長的想腳本語言,其實(shí)它是比java, c#要高效的多的c語言!!!),但是swift的強(qiáng)大之處在于它站在所有語言的肩膀上,吸取所有語言的精華。
雖然對(duì)于objective-c的程序員來說,這些[ ]看上去特顯酷 , 你們知道就是這個(gè)中括弧嚇跑了多少c++, java , c#的程序員嘛?所以說這個(gè)小小的變化,可以讓蘋果的開發(fā)更平易近人,對(duì)有其他開發(fā)語言基礎(chǔ)的人來說更友好。但蘋果不會(huì)這么自甘平庸,我們知道objective-c里方法的調(diào)用有種語法是其他主流語言沒有的,那就是標(biāo)簽。我們?cè)谑褂胘ava, c++, c, c#等語言時(shí),如果使用 rect.set( 10, 20, 100, 500 ), 雖然在寫set方法的時(shí)候有提示四個(gè)形參的含義,但寫完后,鬼知道這句代碼中10, 20, 100, 500是啥意思(我是舉了個(gè)簡(jiǎn)單的例子,不要因此懷疑我的智商!)?所以代碼的可讀性就變的很差, 而objective-c很完美的解決了這個(gè)問題 : [ rect setX:10 y:20 width:100 height:500 ]看看!多棒!swift當(dāng)然不會(huì)丟棄這么好的傳統(tǒng), 在swift中是這個(gè)樣子的 rect.set( x:10, y:20, width:100, height:500 )看看!!!完美吧!
其實(shí)swift中對(duì)類的定義和java, c#幾乎一樣,再也不分頭文件和.m文件了。
一個(gè)類的定義語法如下:
class Weapon { var name:NSString var power:int init( name:NSString, power:int ) { self.name = name self.power = power } func shoot( ) }
注意:swift中的語句不需要分號(hào)結(jié)束( swift在吸引幼齒入swift大法方面無不用其極!)
其次,終于有構(gòu)造函數(shù)和析構(gòu)函數(shù)了!!!objective-c也有?no no no!!!objective-c中才沒有構(gòu)造函數(shù),真正的構(gòu)造函數(shù)是系統(tǒng)自動(dòng)調(diào)用的,而不是強(qiáng)迫程序員去調(diào)用。以前要強(qiáng)迫程序員[ [ Obj alloc ] init ], 傻哇? 如果程序員比較笨比較呆忘記寫init咋辦? 現(xiàn)在終于終于終于系統(tǒng)自動(dòng)調(diào)用了!!!
Weapon weapon = Weapon( name:"人間大炮", power: 100000000000 )
我才沒有寫錯(cuò), 對(duì)的!現(xiàn)在和java, c#一樣!雖然weapon是一個(gè)指針,但不要寫那顆星號(hào)!!因?yàn)檫@顆星號(hào)嚇?biāo)肋^好多人!" 啥?指針?!!啊。。。。。"(嚇?biāo)懒耍?br />
c, c++的程序員注意了,這個(gè)weapon對(duì)象不是分配在棧內(nèi)存上的, 仍然是alloc出來的, 在堆上呢。
對(duì)于override在java,c++,objective-c中都有問題,舉個(gè)栗子:
@interface Weapon -(void)shoot; @end @interface Gun : Weapon -(void)Shoot; @end
在大項(xiàng)目中經(jīng)常會(huì)遇到這個(gè)問題,程序員的本意是希望覆蓋父類的shoot ,結(jié)果手潮。。。。寫成了Shoot , 這既沒有語法錯(cuò)誤,也沒有邏輯錯(cuò)誤,結(jié)果在
Weapon* currentWeapon = [ Gun new ];
[currentWeapon shoot ] 中調(diào)用的卻是父類的shoot方法( 因?yàn)樽宇惛緵]有覆蓋啦,子類大小寫不小心寫錯(cuò)了 ), 這種小錯(cuò)誤如果出現(xiàn)在超大型項(xiàng)目種還真是很難找呢!!現(xiàn)在,swift終于解決這個(gè)問題啦! 子類覆蓋父類方法的時(shí)候,一定要在方法前寫上override
override func shoot{ }
這樣,編譯器一看方法前寫了override, 它就會(huì)在父類中去查找是否有shoot方法, 如果你寫錯(cuò)成override func Shoot, 那編譯器就立刻能發(fā)現(xiàn)報(bào)錯(cuò)啦!
轉(zhuǎn)載自cocoachina,原文地址://www.cocoachina.com/bbs/read.php?tid=204294
推薦閱讀:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)