使用Swift调用AFNetworking进行网络请求

Swift使用Swift调用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请求

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//
//  AFRequestTest.swift
//  SwiftDemo
//
//  Created by MBinYang on 15/4/9.
//  Copyright (c) 2015年 cc.huanyouwang. All rights reserved.
//
 
import UIKit
 
class 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中调用来测试

 

 

?
1
2
3
4
5
6
7
override func viewDidLoad()
{
     super .viewDidLoad()
     
     
     AFRequestTest().afRequestTest()
}


 

输出:

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{
     result =     (
                 {
             state =             {
                 address = U4e2dU56fdU5317U4eacU5e02U671dU9633U533aU5efaU5916U8857U9053U5efaU56fdU8def100U53f7;
                 content = U4f60U662f;
                 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 = U4e2dU56fdU5317U4eacU5e02U77f3U666fU5c71U533aU53e4U57ceU8857U9053;
                 content = U516cU79efU91d1;
                 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.避免强引用循环的语句

 

 

?
1
unowned var unSelf:AFRequestTest = self

无主引用,不会增加引用计数;不能为nil

或者

 

?
1
weak var self2:AFRequestTest! = self

弱引用,也不会增加引用计数;但返回的是可选类型,可以为nil

4.类型转换,向下转型

responseObject as NSData

向下类型转换,使用 as 或者 as? ;

区别是 as?转换失败会返回nil;成功会返回可选类型

 

5.构造器和Java/C++等类似

 

?
1
AFRequestTest().afRequestTest()

Swift的构造器相当于 Oc的 alloc init的合体,是用来初始化的.

 

不过 Swift的构造器是 init()其他语言的是 类名

关于Swift构造器和其他面向对象文章,后续文章会陆续登陆

6.不使用AF的JSON解析

 

 

?
1
op.responseSerializer = AFHTTPResponseSerializer()
AFNetwoking的JSON解析对于某些接口可能会解析失败,导致 错误输出

 

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

 

这时我们只要加上面的代码,即可不让 AF帮我们解析;而使用系统的自带的JSON解析


7.Post请求类似,上述代码提供了一个测试的接口


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值