IOS开发: 在Swift中使用AFNetworking

 今天主要简单说一下如何在Swift工程中使用时下比较流行的AFNetworking请求框架。

    由于目前AFNetworking目前还没有Swift版本,因此我们的工程使用cocoapod来安装AFNetworking。

这是我的Prodfile文件,cocoapod的使用方法跟使用OC是时候是一模一样的,为了方便,我们在工程中随便创建一个类,选择语言OC,我们会发现工程中会多出来一个SwiftStudy-Bridging-Header.h文件,删除创建的oc类,在这里引入

 

开发: 在Swift中使用AFNetworking-afnetworking swift">

 

好了,可以在swift文件使用AFNetworking

 
  1. platform :ios, '7.0' 
  2. pod 'SDWebImage', '~> 3.7.1' 
  3. pod 'CocoaHTTPServer', '~> 2.3' 
  4. pod 'RoutingHTTPServer', '~> 1.0.0' 
  5. pod 'Masonry', '~> 0.6.1' 
  6. pod 'ASIHTTPRequest', '~> 1.8.2' 
  7. pod 'MBProgressHUD', '~> 0.9.1' 
  8. pod 'AFNetworking', '~> 2.5.4' 

在使用OC进行项目开发时,对AFNetworking做了一层简单的外部封装,今天我们就把它用Swift实现。

使用过新版AFNetworking的都知道它有一个AFHTTPSessionManager,在这里我们继承AFHTTPSessionManager使用单例模式返回一个该类的实例,

来进行网络操作在swift中单例的写法跟OC语法差别很大,Swift语法在这里不多讲解,请参考《The Swift Programming Language》,我们来看下代码

 
  1. // 
  2. // RequestClient.swift 
  3. // SwiftStudy 
  4. // 
  5. // Created by 杨雯德 on 15/8/19. 
  6. // Copyright (c) 2015年 杨雯德. All rights reserved. 
  7. // 
 
  1. import UIKit 
  2. class RequestClient: AFHTTPSessionManager { 
  3.      
  4.    class var sharedInstance :RequestClient { 
  5.        struct Static { 
  6.            static var onceToken:dispatch_once_t = 0 
  7.            static var instance:RequestClient? = nil 
  8.        } 
  9.          
  10.        dispatch_once(&Static.onceToken, { () -> Void in 
  11.          //string填写相应的baseUrl即可 
  12.            var url:NSURL = NSURL(string: "")! 
  13.            Static.instance = RequestClient(baseURL: url) 
  14.        })  
  15.          //返回本类的一个实例 
  16.        return Static.instance! 
  17.          
  18.    } 

拿到RequestClient的实例我们就可以进行post、get以及上传图片文件的封装了

在OC中使用AFNetworking习惯使用block来进行数据的传递等,在Swift我们使用闭包来进行数据的传输

这是我的文件目录

SwiftStudy ------------工程目录

AppDelegate.swift

myViewController.swift

ViewController.swift

NetWork ------------网络相关

RequestClient.swift

RequestAPI.swift

CustomVC ------------VC的封装,

CostomNavigationVC.swift

BaseViewController.swift

在这里我们主要拿中国天气网的API测试一个PUT请求,来看下RequestAPI.swift。

 
  1. override func viewDidLoad() { 
  2. super.viewDidLoad() 
  3.  
  4. self.view.backgroundColor = UIColor.brownColor() 
  5. var image:UIImage 
  6. //Navigationbar 左侧返回按钮自定义,参考文件BaseViewController.swift 
  7. self.leftButton(nil, hlIimage: nil, title: "返回", size: CGSize(width: 38, height: 30), action: "buttonClick", target: self) 
  8.  
  9. var dic:Dictionary= ["A":"a","B":"b","C":"c"]; 
  10.  
  11.  
  12. //post测试 
  13. RequestAPI.POST("List", body: dic, succeed: succeed, failed:failed) 
  14. //get测试 
  15. var getUrl:String = "http://m.weather.com.cn/atad/101190101.html" 
  16. RequestAPI.GET(getUrl, body: nil, succeed: succeed, failed: failed) 
  17.  
  18. //文件上传 
  19. // Do any additional setup after loading the view. 
  20. func succeed(task:NSURLSessionDataTask!,responseObject:AnyObject!)->Void{ 
  21. println("oh my god 成功了+(responseObject)") 
  22.  
  23. func failed(task:NSURLSessionDataTask!,error:NSError!)->Void{ 
  24. println("oh shit 失败了") 

在ViewController我们通过调用RequestAPI的类方法GET来获取数据,同时我们定义了两个方法succeed和failed,注意看方法中得参数和AFHTTPSessionManager

返回数据的参数是一样的,这样我们的拿到的数据就是服务器给我们返回的全部数据,调用equestAPI的GET方法将讲个函数指针传递过去,网络请求成功之后会通过函数指针将数据返回。

然后我们就可以进行其他的工作了。

使用过新版AFNetworking会经常遇到3084 1011和1016错误,出现这几个错误一般是数据解析错误,更改AFNetworking里面相应的数据类型即可,也可以根据实际情况自己定义。

 
  1. /** 
  2. RequestClient.sharedInstance.requestSerializer = AFJSONRequestSerializer() 
  3. RequestClient.sharedInstance.responseSerializer = AFJSONResponseSerializer() 
  4. RequestClient.sharedInstance.requestSerializer.setValue("application/json,text/html", forHTTPHeaderField: "Accept") 
  5. RequestClient.sharedInstance.requestSerializer.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 
  6. */ 

总结,AFNetworking已经是用的最多的网络的框架,对AFNetworking的进一步的简单外层封装,我们就可以避免网络请求时大量初始化工作,直接使用单例即可,这样提高了

效率,也节省了大量的代码,至少一眼望去自己看的也比较舒服,通过使用Swift来封装AFNetworking,也系统的熟悉一下swift的基本语法,数据类型,以及单例,闭包等得使用,

对应swift初学者来说,实际学习效果还是比较明显的,有了这些现在你就可以使用swift来写一个简单的糗百或者新闻了,还等什么那,只要自己往前冲,就不会再最后。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索cocoa pods
, 数据
, swift
, 封装
, cocoapods
, masonry
, oc ios
, ios c/c++
, mbprogresshud 显示
, afnetworking
, ios afnetworking
, navigationbar
, afnetwork
cocoapods使用问题
afnetworking swift、swift3 afnetworking、afnetworking swift版、swift用afnetworking、afnetworking 使用,以便于您获取更多的相关知识。

时间: 2024-10-02 14:25:54

IOS开发: 在Swift中使用AFNetworking的相关文章

[译]iOS开发者在Swift中应避免过度使用

本文讲的是[译]iOS开发者在Swift中应避免过度使用, 就在前几天,我终于把项目迁移到了Swift2.2,在使用SE-0022建议的#selector语句时,我遇到了一些问题.如果在protocol extension中使用#selector,这个protocol必须添加@Objc修饰符.而之前的Selector("method:")语句则不需要添加. 通过协议的扩展配置视图控制器 为了达到本文的目的,我简化了工作中项目的代码,但所有核心的思想都保留着.一种我经常在swift里用的

疑问-IOS开发,cell中的UIView上添加的按钮不能响应事件

问题描述 IOS开发,cell中的UIView上添加的按钮不能响应事件 cell 里添加UIView,UIView上添加按钮,但是按钮不能响应点击时间,交互都打开了,怎么回事,求解.. 解决方案 可能是线程卡死,也可能是所有事件全部都集中在了UIView上无法分发时间,这里给你推荐一个博客http://blog.csdn.net/u013243469/article/details/41284027

【iOS】在Swift中使用JSONModel

这里不讨论JSONModel和Alamofire这两个项目,直接上代码 BaseModel.h #import "JSONModel.h" @interface BaseModel : JSONModel -(instancetype)initWithDictionary:(NSDictionary*)dict; @end BaseModel.m  #import "BaseModel.h" @implementation BaseModel //Make all 

iOS开发系列--Swift语言

概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其中你可以看到C#.Java.Javascript.Python等多种语言的影子.同时在2015年的WWDC上苹果还宣布Swift的新版本Swift2.0,并宣布稍后Swift即将开源,除了支持iOS.OS X之外还将支持linux. 本文将继续iOS开发系列教程,假设读者已经有了其他语言基础(强烈

ios开发之SWIFT中delegate工作笔记

delegate Cocoa 开发中接口-委托 (protocol-delegate) 模式是一种常用的设计模式,它贯穿于整个 Cocoa 框架中,为代码之间的关系清理和解耦合做出了不可磨灭的贡献. 在 ARC 中,对于一般的 delegate,我们会在声明中将其指定为 weak,在这个 delegate 实际的对象被释放的时候,会被重置回 nil.这可以保证即使 delegate 已经不存在时,我们也不会由于访问到已被回收的内存而导致崩溃.ARC 的这个特性杜绝了 Cocoa 开发中一种非常常

iOS 开发,工程中混合使用 ARC 和非ARC

[前提知识] ARC:Automatic Reference Counting,自动引用计数 在开发 iOS 3 以及之前的版本的项目时我们要自己负责使用引用计数来管理内存,比如要手动 retain.release.autorelease 等,而在其后的版本可以使用 ARC,让系统自己管理内存. [问题] 在项目开发过程中我们通常会用到第三方提供的源代码,麻烦的是有些开源项目用的是 ARC,有的用的是非 ARC. 我在使用 SVProgressHUD 做等待视图时遇到问题,最终发现该项目使用的是

IOS开发:Xcode7中的一些调试技巧

  Xcode7中苹果为我们增加了两个重要的debug相关功能.了解之后觉得非常实用,介绍给大家. 1.Address Sanitizer: 妈妈再也不用担心 EXC_BAD_ACCESS? EXC_BAD_ACCESS一直是很多开发者的噩梦,因为这个错误很不直观,出现后往往要花很长时间才能定位到错误.苹果这次带来了革命性的提升. 在项目的Scheme中Diagnostics下,选中enable address sanitizer(注意选中后Xcode会重新编译整个项目). 这样设置后,如果再出

ios开发把ToolBar中的元素居中的技巧

  在IPhone应用开发时,经常用到ToolBar,其中的控件通常都是居左,想让它居中就有点困难. 这里介绍一种方法: 将Flexible Space Bar Button Item从库中拖到位于控件左侧的工具栏上,然后将另一个Flexible Space Bar Button Item拖到位于控件右侧的工具栏上.当我们调整该工具栏的大小时,这些项目将使分段控件位于工具栏的中心.

iOS开发笔记--UIView中的坐标转换

[objc] view plaincopy // 将像素point由point所在视图转换到目标视图view中,返回在目标视图view中的像素值   - (CGPoint)convertPoint:(CGPoint)point toView:(UIView *)view;   // 将像素point从view中转换到当前视图中,返回在当前视图中的像素值   - (CGPoint)convertPoint:(CGPoint)point fromView:(UIView *)view;      /