Swift开发豆瓣图书应用(五) 封装简单网络请求方法

看看最后的代码

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, 需要函数调用者自己处理异常.
请求步骤
  1. AFHttpSessionManager是AFNetworking 3.0之后推荐的http请求方式了,初始化它的对象,设置网络超时时间.
  2. 添加蒙层:将MBProgressHUD添加到Application的keyWindow上
  3. 调用AFHttpSessionManager对象的GET或者POST方法
  4. 请求成功:隐藏蒙层然后调用success闭包,方法名称后面加?表示如果success闭包为nil,就不执行任何操作,否则会崩溃.
  5. 请求失败:隐藏蒙层然后调用failure闭包.

Toast

github地址 : https://github.com/scalessec/Toast
类似Android系统的Toast效果,它没有焦点,不会阻塞交互,过一定的时间自动消失。主要用于向用户显示提示消息

你可能感兴趣的:(Swift开发豆瓣图书应用(五) 封装简单网络请求方法)