Swift3.0封装 AFN 的 GET&POST网络请求
阅读原文时间:2023年07月15日阅读:2

//
// PSNetWorkManage.swift
// WeiBoSwift
//
// Created by 思 彭 on 16/9/25.
// Copyright © 2016年 思 彭. All rights reserved.
//

import UIKit
import AFNetworking

// Swift的枚举支持任意数据类型,不需要,分隔
enum PSHTTPMethod{
case GET
case POST
}

/// 网络管理工具
class PSNetWorkManage: AFHTTPSessionManager {

// 单例  
static let shared = PSNetWorkManage()

// MARK:- get请求  
func getWithPath(path: String,paras: Dictionary<String,Any>?,success: @escaping ((\_ result: Any) -> ()),failure: @escaping ((\_ error: Error) -> ())) {

    var i =  
    var address = path  
    if let paras = paras {

        for (key,value) in paras {

            if i ==  {

                address += "?\\(key)=\\(value)"  
            }else {

                address += "&\\(key)=\\(value)"  
            }

            i +=  
        }  
    }

    let url = URL(string: address.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!)

    let session = URLSession.shared

    let dataTask = session.dataTask(with: url!) { (data, respond, error) in

        if let data = data {

            if let result = try? JSONSerialization.jsonObject(with: data, options: .allowFragments){

                success(result)  
            }  
        }else {

            failure(error!)  
        }  
    }  
    dataTask.resume()  
}

// MARK:- post请求  
func postWithPath(path: String,paras: Dictionary<String,Any>?,success: @escaping ((\_ result: Any) -> ()),failure: @escaping ((\_ error: Error) -> ())) {

    var i =  
    var address: String = ""

    if let paras = paras {

        for (key,value) in paras {

            if i ==  {

                address += "\\(key)=\\(value)"  
            }else {

                address += "&\\(key)=\\(value)"  
            }

            i +=  
        }  
    }  
    let url = URL(string: path)  
    var request = URLRequest.init(url: url!)  
    request.httpMethod = "POST"  
    print(address)  
    request.httpBody = address.data(using: .utf8)  
    let session = URLSession.shared  
    let dataTask = session.dataTask(with: request) { (data, respond, error) in

        if let data = data {

            if let result = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) {

                success(result)  
            }

        }else {  
            failure(error!)  
        }  
    }  
    dataTask.resume()  
}  

}