Swift教程16-使用Swift调用AFNetworking进行网络请求

前端之家收集整理的这篇文章主要介绍了Swift教程16-使用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. // AFRequestTest.swift
  3. // SwiftDemo
  4. //
  5. // Created by MBinYang on 15/4/9.
  6. // Copyright (c) 2015年 cc.huanyouwang. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10.  
  11. class AFRequestTest: NSObject {
  12. func afRequestTest()
  13. {
  14. var paramDict = ["access_token":"2.00HZE3aF0GvJSM551ca8e0920NF13N","uid":"5117873025"]
  15. var afManager = AFHTTPRequestOperationManager()
  16. var op = afManager.GET("http://lovemyqq.sinaapp.com/getState.PHP",parameters:paramDict,success: { (operation: AFHTTPRequestOperation!,responSEObject: AnyObject!) in
  17. var arr: AnyObject! = NSJSONSerialization.JSONObjectWithData(responSEObject as NSData,options: NSJSONReadingOptions.AllowFragments,error: nil)
  18. //打印数组或者字典元素
  19. println(arr!)
  20. //??避免强引用循环,可能由于OC版的AF 转化为 Swift代码时存在bug,使用弱引用或者无主引用,导致 self 为空;待完善
  21. //unowned var unSelf:AFRequestTest = self//
  22. //self.xxx
  23. //操作
  24. },failure: { (operation: AFHTTPRequestOperation!,error: NSError!) in
  25. println("请求错误Error: " + error.localizedDescription)
  26. unowned var unSelf:AFRequestTest = self
  27. //self.xxx操作
  28. //错误的相关操作
  29. })
  30. op.responseSerializer = AFHTTPResponseSerializer()
  31. op.start()
  32. }
  33.  
  34. }


调用网络请求,在一个 ViewController的 ViewDidLoad中调用来测试


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


输出:

  1. {
  2. result = (
  3. {
  4. state = {
  5. address = "\U4e2d\U56fd\U5317\U4eac\U5e02\U671d\U9633\U533a\U5efa\U5916\U8857\U9053\U5efa\U56fd\U8def100\U53f7";
  6. content = "\U4f60\U662f";
  7. date = "2015-01-07 19:06:13";
  8. fromUid = 5117873025;
  9. id = 6664;
  10. image = "http://xuyingtest-xuyingttt.stor.sinaapp.com/1420628745userImage.png";
  11. imagecount = 1;
  12. latitude = "39.907007";
  13. longitude = "116.470241";
  14. };
  15. },{
  16. state = {
  17. address = "\U4e2d\U56fd\U5317\U4eac\U5e02\U77f3\U666f\U5c71\U533a\U53e4\U57ce\U8857\U9053";
  18. content = "\U516c\U79ef\U91d1";
  19. date = "2014-11-23 11:10:57";
  20. fromUid = 5117873025;
  21. id = 5593;
  22. image = "http://xuyingtest-xuyingttt.stor.sinaapp.com/1416712253userImage.png";
  23. imagecount = 1;
  24. latitude = "39.897711";
  25. longitude = "116.184322";
  26. };
  27. },{
  28. state = {
  29. address = "";
  30. content = Chen;
  31. date = "2014-11-21 11:02:19";
  32. fromUid = 5117873025;
  33. id = 5551;
  34. image = "http://xuyingtest-xuyingttt.stor.sinaapp.com/1416538936userImage.png";
  35. imagecount = 1;
  36. latitude = "";
  37. longitude = "";
  38. };
  39. }
  40. );
  41. success = 0;
  42. }


注意事项和说明:

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 asNSData

向下类型转换,使用 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请求类似,上述代码提供了一个测试的接口



Swift系列教程:http://www.jb51.cc/cata/272739

猜你在找的Swift相关文章