看看最后的代码
import UIKit
import AFNetworking
import MBProgressHUD
import Toast
extension NSObject {
func GET(URLString:String, parameters:[String:AnyObject]?, showHUD:Bool = true, success:((AnyObject?) -> Void)?, failure:((NSError) -> Void)? ){
let manager = AFHTTPSessionManager()
manager.requestSerializer.timeoutInterval = 10
let keyWindow = UIApplication.sharedApplication().delegate!.window!
if showHUD {
MBProgressHUD.showHUDAddedTo(keyWindow, animated: true)
}
manager.GET(URLString, parameters: parameters, success: { (operation, responseObject) -> Void in
if showHUD {
MBProgressHUD.hideAllHUDsForView(keyWindow, animated: true)
}
success?(responseObject)
}, failure: { (aFHTTPRequestOperation, error) -> Void in
if showHUD {
MBProgressHUD.hideAllHUDsForView(keyWindow, animated: true)
keyWindow?.makeDefaultToast("网络异常,请检查网络")
}
failure?(error)
})
}
func POST(URLString:String, parameters:[String:AnyObject]?, showHUD:Bool = true, success:((AnyObject?) -> Void)?, failure:((NSError) -> Void)?){
let manager = AFHTTPSessionManager()
manager.requestSerializer.timeoutInterval = 10
let keyWindow = UIApplication.sharedApplication().keyWindow
if showHUD {
MBProgressHUD.showHUDAddedTo(keyWindow, animated: true)
}
manager.POST(URLString, parameters: parameters, success: { (operation, responseObject) -> Void in
if showHUD {
MBProgressHUD.hideAllHUDsForView(keyWindow, animated: true)
}
success?(responseObject)
}, failure: { (aFHTTPRequestOperation, error) -> Void in
if showHUD {
MBProgressHUD.hideAllHUDsForView(keyWindow, animated: true)
keyWindow?.makeDefaultToast("网络异常,请检查网络")
}
failure?(error)
})
}
}
extension UIView {
func makeDefaultToast(message:String) {
makeToast(message, duration: 2, position: CSToastPositionCenter)
}
}
import
在Cocospods中加入use_frameworks!配置后,就可以类似import UIKit一样,import相应的pod libraries,不需要在bridge文件中导入相应的头文件了.
extension NSObject
因为目的是所有的类都可以使用它进行网络请求,所以选择扩展NSObject
方法的参数
- URLString: 请求的URL地址字符串
- parameters: 参数Dictionary,可选类型说明可以传递nil;Dictionary的key是字符串类型,value是AnyObject,表示可以传递任何Swift基本数据类型.
- showHUD: 不传递这个参数,它的默认值会是true,表示请求时候会弹出MBProgressHUD蒙层,禁止用户进行别的操作,false表示是在后台默默的进行网络请求,用户察觉不到.
- success: 可选类型, 请求成功的回调闭包,闭包的参数是AnyObject?,表示请求成功返回的数据
- failure: 可选类型, 请求失败的回调闭包,闭包的参数是NSError, 需要函数调用者自己处理异常.
请求步骤
- AFHttpSessionManager是AFNetworking 3.0之后推荐的http请求方式了,初始化它的对象,设置网络超时时间.
- 添加蒙层:将MBProgressHUD添加到Application的keyWindow上
- 调用AFHttpSessionManager对象的GET或者POST方法
- 请求成功:隐藏蒙层然后调用success闭包,方法名称后面加?表示如果success闭包为nil,就不执行任何操作,否则会崩溃.
- 请求失败:隐藏蒙层然后调用failure闭包.
Toast
github地址 : https://github.com/scalessec/Toast
类似Android系统的Toast效果,它没有焦点,不会阻塞交互,过一定的时间自动消失。主要用于向用户显示提示消息