Swift + Alamofire 4.8 的网络请求简单封装 记录

博客提及使用很简单,但未明确使用对象。推测是关于信息技术相关事物的使用,不过信息有限,难以获取更多关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import UIKit
import Foundation
import Alamofire


typealias ReqRsponseSuccess = (_ response: AnyObject) -> Void
typealias ReqResponseFail = (_ error: AnyObject) -> Void
typealias NetworkStatus = (_ HTNetworkStatus: Int32) -> Void

@objc enum HTNetworkStatus: Int32 {
    case  HttpUnknow       = -1  //未知
    case  HttpNoReachable  = 0  // 无网络
    case  HttpWwan         = 1   //2g , 3g 4g
    case  HttpWifi         = 2  // wifi
}
struct HTTPAPI {

// 设置公共域名或者Ip
    static let  hostName = ""
}
enum methodType {
    case RequestMethodGet
    case RequestMethodPost
}


class HttpNetWork: NSObject{
    //1.创建类的实例变量
    //2.let是线程安全的
  // 对于单例实例来说,需要创建一个唯一对外输出实例的方法
    // 静态变量用static来处理
    static let singleton  = HttpNetWork()
    ///当前网络状态
    var htNetworkStatus: HTNetworkStatus = HTNetworkStatus.HttpWifi
    
    public func getRequestWith(url: String,
                          params:[String: Any]?,
                          success:@escaping ReqRsponseSuccess,
                          error:@escaping ReqResponseFail){
//        1、JSONEncoding.default 是放在HttpBody内的,   比如post请求
//        2、URLEncoding.default 在GET中是拼接地址的,    比如get请求
//        3、URLEncoding(destination: .methodDependent) 是自定义的URLEncoding,methodDependent的值如果是在GET 、HEAD 、DELETE中就是拼接地址的。其他方法方式是放在httpBody内的。
//        4、URLEncoding(destination: .httpbody)是放在httpbody内的
    Alamofire.request(url, method: .get, parameters: params, encoding:URLEncoding.default, headers: nil).responseJSON { (response) in
            switch response.result{
            case .success:
                if let value = response.result.value as? [String: Any]{
                    success(value as AnyObject)
                }
                break
                
            case .failure(let err):
                 error(err as AnyObject)
                break
            }
        }
    }
    
    public func postRequestWith(url: String,
                               params:[String: Any]?,
                               success:@escaping ReqRsponseSuccess,
                               error:@escaping ReqResponseFail){
        
        Alamofire.request(url, method: .post, parameters: params, encoding:URLEncoding.default, headers: nil).responseJSON { (response) in
            switch response.result{
            case .success:
                if let value = response.result.value as? [String: Any]{
                    success(value as AnyObject)
                }
                break
                
            case .failure(let err):
                error(err as AnyObject)
                break
            }
            
        }
        
        
    }
    
    public func requestWith(url:String,
                              httpMethod: Int32,
                              params:[String: Any]?,
                              success:@escaping ReqRsponseSuccess,
                              error:@escaping ReqResponseFail){
        
        let  httpUrl = HTTPAPI.hostName + url
        
// 设置公共请求参数
        var updict = params
        let token = UserDefaults.standard.string(forKey: "token")
        if  token != nil {
            updict?["access_token"] = token
        }
        updict?["IOS"] = "app_os"
        updict?["app_version"] = "1.0"
        updict?["device_id"] = UIDevice.current.identifierForVendor?.uuidString
 
        switch httpMethod {
        case 0:
         getRequestWith(url: httpUrl, params: updict, success: success, error: error)
            
        case 1:
         postRequestWith(url: httpUrl, params: updict, success: success, error: error)
            
        default:
          break
            
        }
    }
    
    

    //切记私有化初始化方法,防止外部通过init直接创建实例。
    private override init() {
        
    }
}






//  网络状态监听
extension  HttpNetWork{
    
    public  func   monitoringNetwork (networkStatus:@escaping NetworkStatus){
        let reachability = NetworkReachabilityManager()
        reachability?.startListening()
        reachability?.listener = { [weak self] status in
//守护。guard语句判断其后的表达式布尔值为false时,才会执行之后代码块里的代码,如果为true,则跳过整个guard语句
            guard  let weakSelf = self else{ return }
            //?? 空和运算符 表示 reachability?.isReachable 如果不是有网 则为false;
            if reachability?.isReachable ?? false {
                switch status {
                case .notReachable:
                    weakSelf.htNetworkStatus = HTNetworkStatus.HttpNoReachable
                case .unknown:
                    weakSelf.htNetworkStatus = HTNetworkStatus.HttpUnknow
                case .reachable(.wwan):
                    weakSelf.htNetworkStatus = HTNetworkStatus.HttpWwan
                case .reachable(.ethernetOrWiFi):
                    weakSelf.htNetworkStatus = HTNetworkStatus.HttpWifi
                }
            }else{
               weakSelf.htNetworkStatus = HTNetworkStatus.HttpNoReachable
                
            }
            networkStatus(weakSelf.htNetworkStatus.rawValue)
        }
    }
    
    public func monitoringDataFormLocalWhenNetChanged() {
        self.monitoringNetwork{ (_) in
            
        }
    }
 
}

使用也很简单 

  let dictionary = ["phone":""
                          "password":""]
    HttpNetWork.singleton.requestWith(url: "请求链接", httpMethod: 0, params: dictionary, success: { (response) in
        //swiftJSON 做josn解析
        let jsonDict = JSON(response)
        print("返回结果:\(jsonDict)")
        
        if  jsonDict["c"].intValue == 0 {
            let model = UserModel.init(fromJson: jsonDict["d"])
            UserDefaults.standard.set(model.accessToken, forKey: "token")
            print("返回结果:\(model)")

        }

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值