Swift教程16-使用Swift調用AFNetworking進行網路請求

來源:互聯網
上載者:User

標籤:swift網路請求   swift調用afnetworking   swift與oc混編   swift json解析   afnetworking請求失敗   

如何使用Swift進行網路請求呢?

我們首先建立一個Swift工程,工程名是SwiftDemo

然後在該工程中建立一個 Oc的類,那麼Xcode會詢問你是否建立 橋接 Oc和 Swift的 SwiftDemo-Bridging-Header.h檔案

選擇YES就會產生 工程名-Bridging-Header.h檔案,在這個檔案中我們引入Oc架構對應的標頭檔即可實現在Swift工程中調用Oc代碼

目前的AFNetworking架構是Oc寫的,我們要在Swift使用AF的話,則需要在 Bridging-Header.h檔案中匯入 "AFNetworking.h"即可

效果如下:




最簡單的AF  Get請求

////  AFRequestTest.swift//  SwiftDemo////  Created by MBinYang on 15/4/9.//  Copyright (c) 2015年 cc.huanyouwang. All rights reserved.//import UIKitclass AFRequestTest: NSObject {             func afRequestTest()    {                var paramDict = ["access_token":"2.00HZE3aF0GvJSM551ca8e0920NF13N","uid":"5117873025"]        var  afManager = AFHTTPRequestOperationManager()        var op =  afManager.GET("http://lovemyqq.sinaapp.com/getState.php",            parameters:paramDict,            success: {  (operation: AFHTTPRequestOperation!,                responseObject: AnyObject!) in                                var arr: AnyObject! = NSJSONSerialization.JSONObjectWithData(responseObject as NSData, options: NSJSONReadingOptions.AllowFragments, error: nil)                                //列印數組或者字典元素                println(arr!)                                //避免強引用迴圈                unowned var unSelf:AFRequestTest = self                                //self.xxx                                //操作            },            failure: {  (operation: AFHTTPRequestOperation!,                error: NSError!) in                println("請求錯誤Error: " + error.localizedDescription)                                unowned var unSelf:AFRequestTest = self                //self.xxx操作                //錯誤的相關操作        })                op.responseSerializer = AFHTTPResponseSerializer()        op.start()                    }   }


調用網路請求,在一個 ViewController的 ViewDidLoad中調用來測試


    override func viewDidLoad()    {        super.viewDidLoad()                        AFRequestTest().afRequestTest()    }


輸出:

{    result =     (                {            state =             {                address = "\U4e2d\U56fd\U5317\U4eac\U5e02\U671d\U9633\U533a\U5efa\U5916\U8857\U9053\U5efa\U56fd\U8def100\U53f7";                content = "\U4f60\U662f";                date = "2015-01-07 19:06:13";                fromUid = 5117873025;                id = 6664;                image = "http://xuyingtest-xuyingttt.stor.sinaapp.com/1420628745userImage.png";                imagecount = 1;                latitude = "39.907007";                longitude = "116.470241";            };        },                {            state =             {                address = "\U4e2d\U56fd\U5317\U4eac\U5e02\U77f3\U666f\U5c71\U533a\U53e4\U57ce\U8857\U9053";                content = "\U516c\U79ef\U91d1";                date = "2014-11-23 11:10:57";                fromUid = 5117873025;                id = 5593;                image = "http://xuyingtest-xuyingttt.stor.sinaapp.com/1416712253userImage.png";                imagecount = 1;                latitude = "39.897711";                longitude = "116.184322";            };        },                {            state =             {                address = "";                content = Chen;                date = "2014-11-21 11:02:19";                fromUid = 5117873025;                id = 5551;                image = "http://xuyingtest-xuyingttt.stor.sinaapp.com/1416538936userImage.png";                imagecount = 1;                latitude = "";                longitude = "";            };        }    );    success = 0;}


注意事項和說明:

1.Swift和Oc調用方法的形式不同,Oc是空格, Swift是點號


2.Swift 網路請求的閉包和 Oc寫法不太一樣詳見


Swift教程15-閉包block多種應用方式

Swift教程14-func函數,函數類型_對比Oc


3.避免強引用迴圈的語句


unowned var unSelf:AFRequestTest = self

無主引用,不會增加引用計數;不能為nil

  或者 

weak var self2:AFRequestTest! = self

弱引用,也不會增加引用計數;但返回的是可選類型,可以為nil

4.類型轉換,向下轉型

responseObject asNSData

向下類型轉換,使用 as  或者  as?  ;

區別是 as?轉換失敗會返回nil;成功會返回可選類型


5.構造器和Java/C++等類似

AFRequestTest().afRequestTest()

Swift的構造器相當於 Oc的 alloc init的合體,是用來初始化的.

不過 Swift的構造器是 init()其他語言的是  類名

關於Swift構造器和其他物件導向文章,後續文章會陸續登陸

6.不使用AF的JSON解析

 op.responseSerializer = AFHTTPResponseSerializer()

AFNetwoking的JSON解析對於某些介面可能會解析失敗,導致 錯誤輸出

Error: Request failed: unacceptable content-type: text/html


這時我們只要加上面的代碼,即可不讓  AF幫我們解析;而使用系統的內建的JSON解析


7.Post請求類似,上述代碼提供了一個測試的介面



Swift系列教程:http://blog.csdn.net/yangbingbinga/article/category/3050845








Swift教程16-使用Swift調用AFNetworking進行網路請求

相關文章

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.