Commit d9dd634a authored by pete谢兆麟's avatar pete谢兆麟

网络请求封装

parent 5af4853a
......@@ -12,6 +12,7 @@
04FAC5432B32BA5F00D24B36 /* YHHomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FAC5422B32BA5F00D24B36 /* YHHomeViewController.swift */; };
04FAC5452B32BA7000D24B36 /* YHMyViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FAC5442B32BA7000D24B36 /* YHMyViewController.swift */; };
04FAC5472B32BAE200D24B36 /* YHBaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FAC5462B32BAE200D24B36 /* YHBaseViewController.swift */; };
04FAC54A2B32CF1000D24B36 /* YHNetRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04FAC5492B32CF1000D24B36 /* YHNetRequest.swift */; };
6203A87EDC96313BBE789D9C /* Pods_galaxy.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */; };
A5573ED22B317BFF00D98EC0 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5573ED12B317BFF00D98EC0 /* AppDelegate.swift */; };
A5573EDB2B317C0000D98EC0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A5573EDA2B317C0000D98EC0 /* Assets.xcassets */; };
......@@ -43,6 +44,7 @@
04FAC5422B32BA5F00D24B36 /* YHHomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHHomeViewController.swift; sourceTree = "<group>"; };
04FAC5442B32BA7000D24B36 /* YHMyViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHMyViewController.swift; sourceTree = "<group>"; };
04FAC5462B32BAE200D24B36 /* YHBaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHBaseViewController.swift; sourceTree = "<group>"; };
04FAC5492B32CF1000D24B36 /* YHNetRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YHNetRequest.swift; sourceTree = "<group>"; };
58C2405158A4A6632D0E7460 /* Pods-galaxy.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-galaxy.debug.xcconfig"; path = "Target Support Files/Pods-galaxy/Pods-galaxy.debug.xcconfig"; sourceTree = "<group>"; };
987C69D43AE8D85DC1930DCF /* Pods_galaxy.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_galaxy.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A5573ECE2B317BFF00D98EC0 /* galaxy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = galaxy.app; sourceTree = BUILT_PRODUCTS_DIR; };
......@@ -86,6 +88,7 @@
04FAC5352B32B79500D24B36 /* Base */ = {
isa = PBXGroup;
children = (
04FAC5482B32CEE000D24B36 /* NetWork */,
04FAC5362B32B7AA00D24B36 /* Controller */,
);
path = Base;
......@@ -142,6 +145,14 @@
path = Controller;
sourceTree = "<group>";
};
04FAC5482B32CEE000D24B36 /* NetWork */ = {
isa = PBXGroup;
children = (
04FAC5492B32CF1000D24B36 /* YHNetRequest.swift */,
);
path = NetWork;
sourceTree = "<group>";
};
4758815B24BAF3CAA24EC6A8 /* Pods */ = {
isa = PBXGroup;
children = (
......@@ -385,6 +396,7 @@
files = (
04FAC5472B32BAE200D24B36 /* YHBaseViewController.swift in Sources */,
A5573ED22B317BFF00D98EC0 /* AppDelegate.swift in Sources */,
04FAC54A2B32CF1000D24B36 /* YHNetRequest.swift in Sources */,
04FAC5452B32BA7000D24B36 /* YHMyViewController.swift in Sources */,
04FAC53A2B32B89D00D24B36 /* YHNavigationViewController.swift in Sources */,
04FAC5382B32B7FA00D24B36 /* YHTabbarViewController.swift in Sources */,
......
//
// YHNetRequest.swift
// galaxy
//
// Created by EDY on 2023/12/20.
//
import Foundation
import Alamofire
class YHNetRequest: NSObject {
///成功回调
typealias SuccessHandlerType = (([String:Any],Int) ->Void)
///失败回调
typealias FailureHandlerType = ((YHNetError) -> Void)
///请求类型
private var requestType: HTTPMethod = .post
///  URL
private var url: String?
///  参数
private var params: [String:Any]?
///  成功的回调
private var success: SuccessHandlerType?
///  失败的回调
private var failure: FailureHandlerType?
///  headers 设置
private var headers: HTTPHeaders?
///  数据请求
private var httpRequest: DataRequest?
///  链式语法
func url(_ url:String?) -> Self{
self.url = url ?? ""
return self
}
///  请求类型
func requestType(_ type: HTTPMethod) -> Self {
self.requestType = type
return self
}
///请求参数
func params(_params: [String:Any]?) -> Self{
self.params = params
return self
}
///成功
func success(_ handler:@escaping SuccessHandlerType) -> Self{
self.success = handler
return self
}
///失败
func failed(_ handler:@escaping FailureHandlerType) -> Self{
self.failure = handler
return self
}
///获取包头
func getHeader() -> HTTPHeaders {
var requestHeader = HTTPHeaders()
if let header = headers {
requestHeader = header
} else {
requestHeader.add(name:"Conatent-Type",value:"application/json")
requestHeader.add(name:"Accept",value:"application/json")
}
return requestHeader
}
///开始请求
func startRequest() -> Request? {
let requestHeaders = getHeader()
///不使用缓存
AF.sessionConfiguration.requestCachePolicy = .reloadIgnoringCacheData
AF.sessionConfiguration.timeoutIntervalForRequest = 30
httpRequest = AF.request(self.url!,method: self.requestType,parameters: self.params,encoding: URLEncoding(destination: .queryString),headers: requestHeaders,interceptor: nil,requestModifier: nil)
_ = httpRequest?.id
httpRequest?.responseString(encoding:.utf8,completionHandler: { string in
print("=======2")
self.completeHandle(string: string)
})
return httpRequest
}
/// 请求response完成处理
func completeHandle(string: AFDataResponse<String>) {
let responseResult = string.result
var resultFlag = false
var errorCodeStr = "0"
var statusCode = string.response?.statusCode ?? 0
var errorResponseMsg = string.error?.localizedDescription ?? ""
var timeOut = string.error?._code
let resultValue = string.value ?? ""
var serverDict = self.converStringToMap(fromStr: resultValue)
switch responseResult {
case.success:
resultFlag = true
break
case.failure:
resultFlag = false
if let underyingError = string.error?.asAFError?.underlyingError {
if let urlError = underyingError as? URLError {
switch urlError.code{
case.timedOut:
statusCode = urlError.code.rawValue
case.cannotConnectToHost:
statusCode = urlError.code.rawValue
case.cannotFindHost:
statusCode = urlError.code.rawValue
case.unsupportedURL:
statusCode = urlError.code.rawValue
default:
break
}
}
}
break
default:
break
}
if statusCode == 200 {
if let suclock = self.success {
suclock(serverDict,statusCode)
}
} else {
let errorModel = YHNetError.init()
errorModel.responseErrorType = .failType
if let errorBlock = self.failure {
errorModel.responseStatusCode = statusCode
errorModel.errResponseMsg = errorResponseMsg
errorModel.errReaponseCode = errorCodeStr
errorBlock(errorModel)
}
}
}
func converStringToMap(fromStr: String = "") -> [String:Any] {
let serverData = fromStr.data(using:String.Encoding.utf8)
do{
let serverDict = try JSONSerialization.jsonObject(with:serverData!,options:JSONSerialization.ReadingOptions.mutableContainers) as? [String:Any]
return serverDict!
} catch {
return [String:Any]()
}
}
}
extension YHNetRequest {
class func getRequest(url:String, params:[String:Any] = [:], successBlock: SuccessHandlerType!, failBlock: FailureHandlerType!) -> Request? {
return YHNetRequest().url(url).requestType(.get).success(successBlock).failed(failBlock).startRequest()
}
}
class YHNetError: NSObject {
var responseStatusCode: Int = 0
var responseStatusCodeStr: String = ""
var errResponseMsg: String = ""
var errReaponseCode: String = ""
var errReaponseTimeOutCode: Int = 0
var responseErrorType: NetResponseErrorType?
}
enum NetResponseErrorType: Int {
case successType,failType
}
//YHNetRequest.getRequest(url: "需要请求的url") { succeseResponse,responseCode in
//
//   print(succeseResponse,responseCode)
//
//   } failBlock: { MiruairNetError in
//
//}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment