1. 程式人生 > >iOS開發系列課程預告

iOS開發系列課程預告

理解 一點 super tin 使用 希望 應該 字符 one

近期在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;
}

@end

int 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的文件)中,[email protected](後綴名為.m的文件)中。一個定義接口。一個定義實現,做到接口跟實現分離,將來能夠通過置換調實現文件來提供新的或者不同的功能。為此,你應該直接使用Xcode來建一個項目,例如以下圖所看到的:

技術分享

技術分享

iOS開發系列課程預告