Alamofire封装

来源:互联网 发布:java技术课程表 编辑:程序博客网 时间:2024/06/05 16:41
摘要: Alamofire封装

//
//  BLHttpSessionsRequest.swift
//  ALSFinancial-Swift
//
//  Created by 冰泪 on 16/8/23.
//  Copyright © 2016年 冰泪. All rights reserved.
//网络请求类封装

import UIKit
import Alamofire

 

//创建请求类枚举
enum RequestType: Int {
    case requestTypeGet
    case requestTypePost
}

//创建一个闭包(注:oc中block)
typealias sendVlesClosure = (AnyObject?, NSError?)->Void
typealias uploadClosure = (AnyObject?, NSError?,Int64?,Int64?,Int64?)->Void

class BLHttpSessionsRequest: NSObject {
    
    // --GET请求获取JSON数据
    func BLGetJSONDataWithUrl(url: String, parameters: AnyObject, successed:(responseObject: AnyObject?) -> (), failed: (error: NSError?) -> ()) {
        
        Alamofire.request(.GET, url, parameters: parameters as? [String : AnyObject]).responseJSON { (data: Response<AnyObject, NSError>) in
            if data.result.isSuccess {
                successed(responseObject: data.data)
            }else {
                failed(error: data.result.error)
            }
        }
    }
    
    // --POST请求获取JSON数据
    func BLPostJSONDataWithUrl(url: String, parameters: AnyObject, successed:(responseObject: AnyObject?) -> (), failed: (error: NSError?) -> ()) {
        //print(parameters)
        Alamofire.request(.POST, url, parameters: parameters as? [String : AnyObject]).responseJSON { (data: Response<AnyObject, NSError>) in
            if data.result.isSuccess {
                successed(responseObject: data.data)
            }else {
                failed(error: data.result.error)
            }
        }
        
    }
    
    // --文件上传
    //fileURL实例:let fileURL = NSBundle.mainBundle().URLForResource("Default",withExtension: "png")
    func BLUpload(URLString:String,fileURL:NSURL,progress:(bytesWritten: Int64?,totalBytesWritten: Int64?,totalBytesExpectedToWrite: Int64?) -> Void, responseResult:(responseValue: AnyObject?,error: NSError?) -> Void) {
        
        Alamofire.upload(.POST, URLString, file: fileURL).progress {(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) -> Void in
            progress(bytesWritten:bytesWritten,totalBytesWritten:totalBytesWritten,totalBytesExpectedToWrite:totalBytesExpectedToWrite)
            }.responseJSON { response in
                responseResult(responseValue:response.result.value,error:response.result.error)
        }
    }
    /*
     ** 写法二  block定义成宏的写法
     //fileURL实例:let fileURL = NSBundle.mainBundle().URLForResource("Default",withExtension: "png")
     func BLUpload(URLString:String,fileURL:NSURL,block:uploadClosure) {
     
     Alamofire.upload(.POST, URLString, file: fileURL).progress {(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) -> Void in
     block(nil,nil,bytesWritten ,totalBytesWritten,totalBytesExpectedToWrite)
     }.responseJSON { response in
     block(response.result.value,response.result.error,nil,nil,nil)
     }
     }
     
     
     */
    
    // --文件下载
    //下载到默认路径let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
    let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
    //默认路径可以设置为空,因为有默认路径
    func BLDownload(type:RequestType,URLString:String,progress:(bytesRead: Int64?,totalBytesRead: Int64?,totalBytesExpectedToRead: Int64?) -> Void, responseResult:(responseValue: AnyObject?,error: NSError?) -> Void) {
        switch type {
        case .requestTypeGet:
            Alamofire.download(.GET, URLString, destination: destination)
                .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
                    progress(bytesRead:bytesRead,totalBytesRead:totalBytesRead,totalBytesExpectedToRead:totalBytesExpectedToRead)
                }
                .response { (request, response, _, error) in
                    responseResult(responseValue:response,error:error)
            }
            break
        case .requestTypePost:
            Alamofire.download(.POST, URLString, destination: destination)
                .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
                    progress(bytesRead:bytesRead,totalBytesRead:totalBytesRead,totalBytesExpectedToRead:totalBytesExpectedToRead)
                }
                .response { (request, response, _, error) in
                    responseResult(responseValue:response,error:error)
            }
        }
    }
    
    /* block定义成宏的写法
     
     let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
     //默认路径可以设置为空,因为有默认路径
     func BLDownload(type:RequestType,URLString:String,block:uploadClosure) {
     switch type {
     case .requestTypeGet:
     Alamofire.download(.GET, URLString, destination: destination)
     .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
     
     block(nil,nil,bytesRead, totalBytesRead, totalBytesExpectedToRead)
     }
     .response { (request, response, _, error) in
     block(response,error,nil,nil,nil)
     }
     break
     case .requestTypePost:
     Alamofire.download(.POST, URLString, destination: destination)
     .progress { (bytesRead, totalBytesRead, totalBytesExpectedToRead) in
     block(nil,nil,bytesRead, totalBytesRead, totalBytesExpectedToRead)
     }
     .response { (request, response, _, error) in
     block(response,error,nil,nil,nil)
     }
     }
     }
     
     */
    
    // --上传多张图片
    func BLPostUploadMultiPicture(url: String, parameters: AnyObject, imgParameters: [UIImage]?, successed:(responseObject: AnyObject?) -> (), failed: (error: NSError?) -> ()) {
        Alamofire.upload(.POST, url, headers: parameters as? [String : String], multipartFormData: { (formData) in
            for index in 0..<imgParameters!.count {
                
                let imageData = UIImagePNGRepresentation(imgParameters![index] )
                formData.appendBodyPart(data: imageData!, name: "img\(index)", fileName: "\(index).jpg", mimeType: "image/png")
            }
        }, encodingMemoryThreshold: Manager.MultipartFormDataEncodingMemoryThreshold){ (result) in
            switch result {
            case .Success(let upload, _, _):
                upload.responseJSON{ respone in
                    print(respone.data)
                    successed(responseObject: respone.data)
                    
                }
            case .Failure(let error):
                
                print(error)
                
                break
            }
        }
    }
    
    
}

转载请注明出处谢谢 http://my.oschina.net/iceTear/blog/743007

原创粉丝点击