如何在 Swift 中使用 Alamofire 進行網絡編程

jopen 8年前發布 | 37K 次閱讀 Alamofire Apple Swift開發

2014 年 6 月 Apple 發布 Swift 以來,如何在 Swift 中進行網絡編程一直成為程序猿們關注的焦點。甚至,Chris Lattner,Swift 的作者之一,也發推說過,在 Swift 中解析 JSON 還有很長的路要走。因此,許多人開始尋求替代方案。盡管,在 Swift 中也有處理 JSON 解析的內建類,但是對開發者來說并不是很友好。幸運的是,Alamofire 出現了。Alamofire 是一個可以幫助我們解析 JSON 的強有力網絡庫,它由 Objective-C 中同類網絡庫 AFNetworking 的作者編寫。

在這個又臭又長、近乎 3500 多詞(譯者注:in English)的教程中,我們將探討一系列廣泛的網絡基本話題,并建立一個假日待辦應用。

同時,你會從本教程中學到:如何使用和解析 JSON,如何自定義服務器端,如何使用 HerokuMongoLab 等工具,HTTP 的工作原理(包括 GET,POST 和 DELETE 請求),如何使用 git 和終端(terminal)以及如何使用 Cocoapods。如果你覺得上面提到的內容太多了,那就對了,拿一杯咖啡,就讓我們開始吧。

如何在 Swift 中使用 Alamofire 進行網絡編程

哦,AppCoda 的所有作者祝大家節日開心!:blush:

注意:本教程是一個進階教程,涵蓋了很多東西。而且,我假設你已經對 iOS 和 Swift 有了很堅實的了解。文章中諸如 tableviews, autolayout,delegate 等話題都不會深入的解釋原理。你如果記不清這些內容,可以先去學習我們推出的 優秀課程 ,然后再回來看本教程。

開始

為了實現本教程要實現的功能,我已用 Node.js 寫了一個服務器后端。這里需要給那些對它不熟悉的人解釋一下,Node.js 是一個基于 Javascript、運行在 Google Chrome 的 V8 引擎中的運行時環境。長話短說,總之它是一個特別可靠,速度特別快,特別厲害的東西,哈哈。

為了搞定這個后端,我同時也使用了 Restify 和 MongoDB。MongoDB 是在 Web 開發人員中很流行的一個 no-SQL 數據庫。我們可以使用 MongoDB 存儲所有我們相關的數據。

當我剛開始使用 Node 的時候,我不知道這些東西都是怎么運行的,其他我所瀏覽的一些博客也從沒有解釋 Node 到底是怎么工作的。因此,盡管這是個 iOS 的博客,但我還是要介紹一下 Javascript 和 Node 服務器的工作原理。

我搜遍了網絡,都沒有一個詳細的教程引導你創建一個 API 與 iOS 應用程序交互的步驟,從現在開始就有了。

遇見 Node.js

像我之前提到的一樣,Node.js 是一個很強大的服務器端開發技術,它建立在 Chrome 的運行時環境上。因此,它是高度異步的和非阻塞的(如果你不知道我說的是什么意思,其實很簡單,大概就是:使用主線程或者應用的主要部分不會被阻塞)。多線程是一種可以防止延遲且能提高項目效率的編程技術。你把應用想象成一條高速公路,如果只有一條通道,卻有 20 輛車要通過,那么他們就很有可能會堵車。如果一條高速公路有三條都有出入口的通道,那么堵車的機會就很小。多線程就可以這樣來理解。在一個多線程的環境里,代碼執行在不同的線程就可以避免應用阻塞,從而防止程序奔潰。

如何在 Swift 中使用 Alamofire 進行網絡編程

Node 是由 Joyent 開發并維持的,Joyent 是一家位于舊金山的云計算公司。

如果你仍然不清楚所有這些是怎么運行的,想想后端具體干了些什么吧。下面列出來一些:

  1. 后端是一個為你傳送 API 的地方(我們現在正在為當前的應用構建 API,就和網絡上其他的 API 一樣,其中包括了我們在之前的 tvOS 教程 中使用的 forecast.io API)。
  2. MongoDB 提供了一個保存所有數據的地方。當你想要 POST 一條新的消息,我們需要有個地方可以存儲這條消息。在本教程中,我們將把這些數據存儲到 MongoDB 數據庫中。
  3. 創建一個功能完整的 REST API,它遵循 REST 協議。
  4. </ol>

    我們的 MongoDB 放在 MongoLab 的主機上,Node 服務器放在 Heroku 上。Heroku 由 Salesforce 提供支持,可以作為 Node,Rails,Python等應用的主機服務商。MongoLab 也是一家可以當 MongoDB 主機的服務商。

    HTTP 請求介紹

    在我們開始寫代碼之前,你應該了解 HTTP 請求以及如何在我們的應用里使用。