关闭

Swift3.0 Alamofire网络请求的封装(get,post,upload图片上传)

标签: 网络
12892人阅读 评论(0) 收藏 举报
分类:

图片上传详解见上一篇文章

import Foundation
import UIKit
import Alamofire
import SwiftyJSON

private let NetworkRequestShareInstance = NetworkRequest()

class NetworkRequest {
    class var sharedInstance : NetworkRequest {
        return NetworkRequestShareInstance
    }
}
extension NetworkRequest {
    //MARK: - GET 请求
    //    let tools : NetworkRequest.shareInstance!

    func getRequest(urlString: String, params : [String : Any], success : @escaping (_ response : [String : AnyObject])->(), failture : @escaping (_ error : Error)->()) {

        //使用Alamofire进行网络请求时,调用该方法的参数都是通过getRequest(urlString, params, success :, failture :)传入的,而success传入的其实是一个接受           [String : AnyObject]类型 返回void类型的函数

        Alamofire.request(urlString, method: .get, parameters: params)
            .responseJSON { (response) in/*这里使用了闭包*/
                //当请求后response是我们自定义的,这个变量用于接受服务器响应的信息
                //使用switch判断请求是否成功,也就是response的result
                switch response.result {
                case .success(let value):
                    //当响应成功是,使用临时变量value接受服务器返回的信息并判断是否为[String: AnyObject]类型 如果是那么将其传给其定义方法中的success
//                    if let value = response.result.value as? [String: AnyObject] {
                        success(value as! [String : AnyObject])
//                    }
                    let json = JSON(value)
                    PrintLog(json)

                case .failure(let error):
                    failture(error)
                    print("error:\(error)")
                }
        }

    }
    //MARK: - POST 请求
    func postRequest(urlString : String, params : [String : Any], success : @escaping (_ response : [String : AnyObject])->(), failture : @escaping (_ error : Error)->()) {

        Alamofire.request(urlString, method: HTTPMethod.post, parameters: params).responseJSON { (response) in
            switch response.result{
            case .success:
                if let value = response.result.value as? [String: AnyObject] {
                    success(value)
                    let json = JSON(value)
                    PrintLog(json)
                }
            case .failure(let error):
                failture(error)
                PrintLog("error:\(error)")
            }

            }
        }

    //MARK: - 照片上传
    ///
    /// - Parameters:
    ///   - urlString: 服务器地址
    ///   - params: ["flag":"","userId":""] - flag,userId 为必传参数
    ///        flag - 666 信息上传多张  -999 服务单上传  -000 头像上传
    ///   - data: image转换成Data
    ///   - name: fileName
    ///   - success:
    ///   - failture:
    func upLoadImageRequest(urlString : String, params:[String:String], data: [Data], name: [String],success : @escaping (_ response : [String : AnyObject])->(), failture : @escaping (_ error : Error)->()){

        let headers = ["content-type":"multipart/form-data"]

        Alamofire.upload(
            multipartFormData: { multipartFormData in
                //666多张图片上传
                let flag = params["flag"]
                let userId = params["userId"]

                multipartFormData.append((flag?.data(using: String.Encoding.utf8)!)!, withName: "flag")
                multipartFormData.append( (userId?.data(using: String.Encoding.utf8)!)!, withName: "userId")

                for i in 0..<data.count {
                    multipartFormData.append(data[i], withName: "appPhoto", fileName: name[i], mimeType: "image/png")
                }
        },
            to: urlString,
            headers: headers,
            encodingCompletion: { encodingResult in
                switch encodingResult {
                case .success(let upload, _, _):
                    upload.responseJSON { response in
                        if let value = response.result.value as? [String: AnyObject]{
                            success(value)
                            let json = JSON(value)
                            PrintLog(json)
                        }
                    }
                case .failure(let encodingError):
                    PrintLog(encodingError)
                    failture(encodingError)
                }
        }
        )
    }
}
1
1
查看评论

Alamofire封装

摘要: Alamofire封装 // //  BLHttpSessionsRequest.swift //  ALSFinancial-Swift // //  Created by 冰泪 on 16/8/23. //  Copyright...
  • QL_ProCareer
  • QL_ProCareer
  • 2017-06-08 12:07
  • 720

swift3面向协议编程实现Alamofire封装

1、原先的实现过程我们一般使用的是Alamofire,对其单例封装 // // NetworkTools.swift // // Created by targetcloud on 2017/3/26. // Copyright © 2017年 targetcloud. All...
  • callzjy
  • callzjy
  • 2017-03-27 00:11
  • 2718

swift4.0 数据请求工具类的创建和使用(基于Alamofire)

1.首先用到的三方库 Alamofire ——> 原来的AFNetworking的作者搞出来的东西 自己pod,不懂百度 pod 'Alamofire' 2.工具类 import...
  • dangbai01_
  • dangbai01_
  • 2018-01-15 15:10
  • 275

Swift - Alamofire与Cache封装实现网络缓存、下载

对Alamofire与Cache的封装实现对网络数据的缓存,可以存储JSON、String、Data,接口简单明了. 封装Alamofire下载,使用更方便. 如有问题,欢迎提出,不足之处,欢迎纠正,欢迎star ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ Github: https://github.co...
  • mqz1228
  • mqz1228
  • 2017-10-18 18:31
  • 234

Alamofire上传图片解决绑定参数问题

Alamofire上传图片解决绑定参数问题 今天记录下载使用Alamofire上传图片时遇到的一个问题,在很多APP里面都有这样的需求,就是上传用户的头像,头像当然是和用户的ID是一一对应的关系,所有在上传图片的时候需要向服务器上传用户的ID或者其他的参数。 但是在Alamofire上传文件的API...
  • wj610671226
  • wj610671226
  • 2016-05-24 16:54
  • 3049

Swift - 使用Alamofire进行图片上传

最近项目使用Swift进行开发,而Alamofire作为受欢迎的网络请求库,用之无可非议。其实这个上传,用了好久了,今天记录下来吧。批量上传代码如下: /// 图片上传 /// /// - Parameters: /// - urlString: 服务器地址 //...
  • a645258072
  • a645258072
  • 2017-09-07 09:14
  • 495

[快速学会Swift第三方库] Alamofire篇

[一分钟学会Swift第三方库] Alamofire篇Alamofire是 Swift 语言的 HTTP 网络开发工具包,AFNetworking的 Swift 版,使用起来相当简单。目录一分钟学会Swift第三方库 Alamofire篇 目录 编码之前 导入Alamofire 添加寻找路径 W...
  • sps900608
  • sps900608
  • 2016-05-23 15:08
  • 7817

iOS 高级网络之Alamofire

点击前往原文README.md(未完待续)译者:QuinnAlamofire简介: Alamofire是AFN团队的Swift版本、是网络请求的开源库、目前有24588 star、目前支持Swift 3.0, 3.1, 3.2, and 4.0译文如下: Alamofire是一个使用Swift语言...
  • Xoxo_x
  • Xoxo_x
  • 2017-07-30 23:51
  • 1204

Alamofire的设计之道

前言:Alamofire是一个由Swift编写的优雅的网络开发框架。大部分用Swift编写的iOS App的网络模块都是基于Alamofire的。作为Swift社区最活跃的几个项目之一,有许多开发者在不断的对其进行完善,所以学习这种优秀的开源代码对深入理解Swift的特性很有帮助。
  • Hello_Hwc
  • Hello_Hwc
  • 2017-06-03 18:54
  • 5641

笔记 Alamofire 使用方法

https://www.jianshu.com/p/42aa9b5b70a3
  • a136447572
  • a136447572
  • 2018-01-15 12:27
  • 106
    个人资料
    • 访问:154286次
    • 积分:2748
    • 等级:
    • 排名:第15494名
    • 原创:128篇
    • 转载:1篇
    • 译文:0篇
    • 评论:8条
    最新评论