iOS開發系列課程預告

來源:互聯網
上載者:User

標籤:prot   content   分離   rip   object   相同   details   geek   framework   

近期在Mac和iOS上做開發,認為應該寫一點東西分享給感興趣的童鞋們。在此之前。以前有非常多同行們都在埋怨蘋果Objective-C的複雜和難以上手,為此也有非常多人對今年(2014年)剛推出的Swift抱有非常多幻想。

首先在現階段甚至五年以內,我個人感覺Mac和iOS的開發能夠說仍然離不開Objective-C,即便是應用級(非系統級)的開發,招聘iOS程式猿肯定還是看有沒有紮實的Objective-C的功底。儘管蘋果希望Swift能夠代替Objective-C,但這一定是一個長期目標。

在Swift的公布會上,庫克說Swift會成為改變一切的語言。只兩個月之後,在TIOBE公布的程式設計語言熱門排行榜上。Java和C++再創曆史新低(當然我最鐘愛的C語言仍然佔領頭把交椅,儘管它的Rating也下降了0.25%),而Swift作為一個新生兒直接搶佔了第18名的寶座(大約100個程式猿裡面就有一個使用Swift的),人們對這個語言的期待能夠說是異常的高。然而,我想說的是。Objective-C沒有想象中的那麼難。而Swift也不是輕鬆愉快就能玩轉的,Swift同一時候接納了兩種編程理念或者叫範式(paradigm)。物件導向編程和函數式編程,而在此之前。關於物件導向編程和函數式編程到底孰優孰劣的爭論非常長時間都沒有停止過。事實上,真正理解兩種編程範式的程式猿不會武斷的說這二者孰優孰劣,由於不論什麼程式設計語言都沒有什麼靈丹妙藥讓其使用者成為優秀的程式猿。又如牛人王垠說的。『不管不論什麼事情,當走向極端時都是有害的。極端化時。物件導向編程和函數式編程都試圖將整個世界裝入其特有的模型中,可是這個世界是不依賴於我們的大腦的思考的情況下運轉的。

假設以為你有一個鎚子。就把全部東西都當成釘子,這顯然是不正確的。唯獨通過認清我們的真實世界。才幹擺脫信仰對我們的束縛。』『讓你的模型適應世界,而不是讓世界適應你的模型。』儘管我不喜歡王垠這個人,可是這段話我還是非常贊同的。林銳博士也說過,『一個優秀的程式猿不會宣稱自己效忠於某種語言』。他們總是選擇最合適的工具做自己想做的事。

事實上,即便你是一個Java程式猿,假設你使用過訪問者模式、命令模式。假設你使用過介面回調,你實際上已經使用了函數式編程的理念。相同,你也能夠用C語言寫出物件導向風格的代碼。

Swift能夠說是比JavaScript還大雜燴的大雜燴。從它身上你似乎不怎麼能看到Objective-C的影子,可是卻有JavaScript、C#、Java和其它一些我不瞭解的動態語言/函數式語言(如Ruby、Python、Haskell)的身影,僅僅是這一點就註定了它『絕不簡單』。事實上蘋果早在2010年就任命Chris Lattern為iOS開發下一代程式設計語言。經過4年的時間才打造出了Swift。簡單的說,Swift是支援物件導向和函數式兩種編程範式的語言,它在動態語言和靜態語言之間尋找平衡點。既有靜態語言的特徵,也詳細動態語言的神韻。同一時候它也是型別安全語言,又支援非常多進階語言特性。包含閉包、泛型等。Swift能給非常方便的和C/C++/Objective-C進行混合編程,使用Unicode字元集。和Swift一起推出的是Xcode中的Playground,這個東西儘管讓某些程式猿認為驚豔,可是事實上IBM早在十年前就有類似的東西,僅僅只是沒有Playground那麼炫罷了。近期看了蘋果iPhone6的公布會。突然認為對蘋果的未來持悲觀態度了,沒有了喬幫主,蘋果還能牛多久呢,誰也不知道。

反正,作為一個程式猿或者開發人員,無論你選擇使用Objective-C還是Swift,都會有非常長的路要走,要經過各種修鍊。事實上Objective-C那種聲明和實現分離的做法不就是在踐行物件導向原則中的介面和實現分離。面向介面編程的理念嗎。所以在我心中那是非常優雅的。

Swift中的protocol(協議)不也是如此嗎,僅僅只是protocol這個詞easy讓人誤解,可能就叫介面(interface)或者契約會更好吧。

以下給出一些連結協助有興趣的童鞋們閱讀相關資料,同一時候附上一段用Objective-C寫的代碼。做的是一個電腦自己跟自己玩猜數位小遊戲。

物件導向程式設計語言中的函數式編程:http://blog.csdn.net/shendl/article/details/2064218

王垠:物件導向和函數式編程的問題出在哪裡?http://geek.csdn.net/news/detail/3603

TIOBE 2014年9月程式設計語言熱門排行榜:http://www.csdn.net/article/2014-09-09/2821587-tiobe-programming

展示了Xcode 6的新功能Playground:


用Objective-C寫的猜數字遊戲(電腦自己出一個1-100的隨機數。然後自己來猜答案)

#import <Foundation/Foundation.h>@interface Game : NSObject {    @private    int correctAnswer;    NSString *hint;}- (Game *) init;- (int) judge:(int)thyAnswer;- (NSString *) getHint;@end@implementation Game- (Game *) init {    self = [super init];    correctAnswer = arc4random() % 100;    return self;}- (int) judge:(int)thyAnswer {    if(thyAnswer == correctAnswer) {        hint = @"恭喜你,答對了。";    }    else {        if(thyAnswer < correctAnswer) {            hint = @"大一點";            return 1;        }        else {            hint = @"小一點";            return -1;        }    }    return 0;}- (NSString *) getHint {    return hint;}@endint main() {    Game *g = [Game new];    int lower = 0, upper = 100;    int result = 0;    do {        int myAnswer = (lower + upper) / 2;        NSLog(@"I guess the answer is: %d", myAnswer);        result = [g judge:myAnswer];        NSLog(@"%@", [g getHint]);        switch(result) {            case -1:                upper = myAnswer; break;            case 1:                lower = myAnswer; break;        }    } while(result != 0);    NSLog(@"遊戲結束!");    [g release];    return 0;}

因為Mac系統是基於Unix的作業系統。因此開啟終端程式能夠通過鍵入命令的方式來編譯和執行上面的代碼,命令例如以下:

cc -framework Foundation 檔案名稱.m (cc就是c-compiler,Unix系統的C編譯器,也可以編譯Objective-C並產生目標代碼)

當然。上面的代碼並不應當放在同一個檔案裡,@interface部分放在標頭檔(尾碼名為.h的檔案)中,而@implementation部分放在源檔案(尾碼名為.m的檔案)中。一個定義介面。一個定義實現,做到介面跟實現分離,將來能夠通過置換調實現檔案來提供新的或者不同的功能。為此,你應該直接使用Xcode來建一個項目,例如以所看到的:



iOS開發系列課程預告

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.