相關閱讀 |
>>> 技術話題—商業文明的嶄新時代 >>> | 簡體 傳統 |
今天是個值得紀念的日子:因為蘋果的WWDC大會。蘋果的每次WWDC(全球開發者大會)舉行都讓我們像打了腎上腺素這么興奮、幸福、驚嘆、震撼、深思。
今年也不例外,最關鍵的是蘋果帶來了它的一門新開發語言:Swift.
霎時間風起云涌,短短幾個小時互聯網界掀起了一股談論Swift的小高潮,如果你不知道Swift,你會覺得這是一件很丟臉的事情,粑粑。
為了不至于太落后受鄙視,我今天也來簡單談談Swift(不知道為何,國內把它稱為雨燕。別這樣好嗎?這讓我想起了 長安鈴木的Swift 雨燕汽車)
一、全新Swift編程語言改變了Objective-C復雜的語法,并保留了Smalltalk的動態特性
這是目前大家公認的對Swift的評價。這里我們來解讀一下:
Objective- C:擴充C的面向對象編程語言。它主要使用于Mac OS X和GNUstep這兩個使用OpenStep標準的系統,是NeXTSTEP和OpenStep的基本語言。(百度百科上抄的),簡單一句話就是:objc主要是開發ios應用的(尤其iphone),因為iphone火了,所以objective-c也火了。如果硬要說objective- c有多優秀,那倒也不至于,當時nextstep選用它開發,就是因為這貨用起來比較方便。
不過尤其是objc的初學者,你會發現,這廝剛開始開發不習慣時是在太繁瑣了。至少我剛開始接觸xcode編程時對objc語法極端的不適應。如果不是xcode編輯器足夠的智能,否則讓我用記事本寫objc代碼一定連坨翔都寫不出。譬如我們來看段代碼:
myclass *mm=[[myclass alloc] initmy:[NSString stringByFormat:"%@",@"shenyi"]]; //手敲的,估計有錯,懶得檢查,沒興趣。
如果換成java其實就是:
myclass mm=new myclass("shenyi"); //就是這么清新爽潔,不緊繃。
Smalltalk:大叔級程序員一定有所耳聞,它被稱為“面向對象編程之母”,主要被廣泛應用于上個世紀80年代,它的出現推動了Objective-C,Actor, Java 和Ruby這些高大上語言的產生。
我們來簡單看一下Smalltalk的語法:
1、賦值。 := ,要讓變量a=1,則需要a:=1
2、比較。= 譬如來判斷變量a是否等于變量b ,這種比較用于內容比較,非指針,
3、深比較a==b . 這是用來比較指針的,很純粹的比較。
對象定義:
在java中也許我們得,int a;String b;float c;
但 是在Smalltalk中,只需|a b c| ,既完成了三個對象的定義,因為Smalltalk也是“接受任意類型的對象”的。后面我們就能理解,為何Swift也是這種貨色,只不過赤裸裸的|a b c |確實不太容易閱讀,因此,加了一個var 的關鍵字。譬如var a=1; 諸如此類
調用函數:
其實最令我吃驚的是Smalltalk的表達式。
譬如在java中我們要寫下面的代碼:
假設有個類叫做myclass,里面有個方法是 showName,傳入一個字符串,然后赤裸裸的返回。
在java中調用:myclass _mm=new myclass();String a="沈逸"; String b=_mm.showName(a);
大家肯定看得懂,然后我們來看Smalltalk的寫法
1
2
3
4
5
6
7
|
|a b|. a:= "沈逸" . mm:=myclass new . b:=mm showName:a. |
好吧,大家會發現,smalltalk連"."、","都木有。大家仔細體會一下吧,有利于后面我們來理解Swift為何是objc和smalltalk的優生優育品種。
啥叫動態特性?
這句話的第三個知識點是”動態特性“。
所謂的動態特性是指:在運行時才進行關系確定的特性。 也就是說譬如Smalltalk,假設有個變量,這個變量是在運行時才進行它的類型檢測和關系綁定的。
所以Smalltalk并不需要事先申明變量的類型,運行時進行系統自動檢測。
二、關于Swift語言
看這節前,我們內心先默念objective-c和smalltalk,接下來你就不難理解這貨為何會這樣了。
變量:
var a=1 大家可以看到,smalltalk的動態特性出現咧~~~~
還可以強迫指定類型: var a:Int=1 我們來想一下smalltalk 是這樣寫的吧
|a|
a:=1(???var a:(Int)=1)
數組和對象:
如果你會javascript,那么恭喜你,你已經會Swift的數組和對象了。看代碼:
var mylist=["I","love","you"]; //數組
對象:
1
2
3
4
5
6
7
|
var mylist=[ "name" : "shenyi" , "sex" : "男" ] |
循環:
1
2
3
4
5
6
|
var b=0; var a= 0 for i in 0..10 { b+= i } |
這是一目了然的簡單。 注意這里有一種".." 還有一個是"...", 前者所謂的是前閉后開,后者是前開后閉。啥意思?很簡單嘛
1
2
3
4
5
6
7
8
9
|
var a= 0 for i in 0..10 { b+= i }等同于 var a= 0 for var i=0;i<10;++i{ b+= i } |
函數:
1
2
3
|
func showname(name: String, age: Int)-> String { return "我的名字是 \(name), 年齡 是 \(age)." } |
函數定義等同于java中的:
String showname(String name,int age)
同時,你還可以通過元組返回多個值
1
2
3
4
5
|
func getusersage(Int,Int,Int){ return (20,23,25) } |
啥叫元組?(可不是元祖蛋糕哦~~)我舉個例子:
var dept1=['小張','小明']; 代表部門1 中有小張和小明兩個同事。
var dept2=['小紅',dept1] ;代表部門2是一個大部門,包含了小紅以及部門1的所有同事,共三個人。
其實 detp1[1]的值是小明。 同理:dept2[1][1]的值 還是小明
好了,這里只做個大概介紹,本文并不是教程,錯誤之處難免。同時個人總結一下:
1、大家如果真要學Swift,那么請在mac上自行搭建環境邊測試邊學,網上目前很早就放出來的幾個Swift目測都有筆誤和講的混淆的地方(我的也一樣),學編程最主要的還是要”自己動手,豐衣足食“,看教程看的大概即可。
2、swift剛出來,大家千萬不要認為objective-c一點不會直接進入swift就可以開發APP了。目測,這和vc和vc.net出來后一樣的道理,你如果完全不會vc,那么vc.net也玩不轉
3、Swift和objc的交互到底到達什么程度,我還沒試用過,100%兼容我個人認為目前是不可能的。
4、當年c#剛出生(2000年),也是通過了多個版本后開始逐步強大和成熟。Swift不可能因為是蘋果的就不需要走這條”曲折的道路“。
5、objc確實有點繁瑣,但是不像網上某些教程說的”極為繁瑣”,要說替代還為之過早。
6、 如果要說Swift的目的,我個人認為肯定不是蘋果為了“減輕開發者負担,降低學習門檻”而設置的,如果要說性能,也許Swift要更勝一籌,但絕對不是 微博上某些“objc噴子”說的比objc高N個檔次,個人更認為Swift可能是蘋果進軍 1)跨平臺 2)穿戴智能設備 3)智能家居等 幾個方面或某個方面用的。
正因為objc的一些特性,讓很多android開發者不愿意轉換到哪怕腳踏兩只船到ios陣營中(這只是其中一個因素),如果出現了一個swift,也許就不一樣了。(僅僅是也許)
7、當然也有種可能是蘋果未來的硬件設備會做大的內核更新,也許內部開發也已經使用了Swift語言。因為在Iphone的A6及以上處理器中(iPhone5采用了A6雙核處理器),蘋果自主設計的內核已經命名為Swift了。
8、有人說蘋果是為了和Android競爭。個人認為這完全沒必要,蘋果的產品一向是“硬件和軟件的完美結合”這個特性打的天下。蘋果更大的著力點應該是在硬件上,沒必要在軟件上和人家分高低。
9、很多人看了一些swift 的教程后(今天才出來的教程哦),覺得swift抄襲了很多語言的特性如java、c#、python。 其實用“借鑒”更合適,因為人家是蘋果。如果我們這么做了,才叫抄襲。
10、今天我在微博上打一則招聘廣告,這么寫了:急需IOS開發,需要精通Swift,開發經驗一天。 結果有幾個網友來告訴我,很想應聘,只不過離開招聘要求還差幾個小時。~~~~~~
沈逸的IT專欄 2014-07-03 12:01:10
稱謂:
内容: