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