119 lines
2.7 KiB
Swift
119 lines
2.7 KiB
Swift
//
|
|
// SPApi.swift
|
|
// Thimra
|
|
//
|
|
// Created by 曾觉新 on 2025/4/8.
|
|
//
|
|
|
|
import UIKit
|
|
import Moya
|
|
import SmartCodable
|
|
|
|
struct SPNetworkData<T: SmartCodable> {
|
|
var parameters: SPNetworkParameters?
|
|
var completion: ((_ response: SPNetworkResponse<T>) -> Void)?
|
|
}
|
|
|
|
struct SPNetworkParameters {
|
|
var baseURL: URL?
|
|
var parameters: [String : Any]?
|
|
var method: Moya.Method = .post
|
|
var path: String
|
|
var isLoding: Bool = false
|
|
var isToast: Bool = true
|
|
}
|
|
|
|
struct SPNetworkResponse<T: SmartCodable>: SmartCodable {
|
|
var code: Int?
|
|
var data: T?
|
|
var msg: String?
|
|
|
|
///原始数据
|
|
@IgnoredKey
|
|
var rawData: Any?
|
|
|
|
}
|
|
|
|
enum SPApi {
|
|
case request(parameters: SPNetworkParameters)
|
|
case uploadFile(parameters: SPNetworkParameters)
|
|
case downloadFile(parameters: SPNetworkParameters)
|
|
}
|
|
|
|
extension SPApi: TargetType {
|
|
|
|
|
|
var baseURL: URL {
|
|
return URL(string: SPBaseURL)!
|
|
}
|
|
|
|
|
|
var path: String {
|
|
switch self {
|
|
case .request(let parameters):
|
|
return SPURLPathPrefix + parameters.path
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
var method: Moya.Method {
|
|
switch self {
|
|
case .request(let parameters):
|
|
return parameters.method
|
|
default:
|
|
return .post
|
|
}
|
|
}
|
|
|
|
var task: Moya.Task {
|
|
switch self {
|
|
case .request(let parameters):
|
|
let p = parameters.parameters ?? [:]
|
|
return .requestParameters(parameters: p, encoding: getEncoding())
|
|
default:
|
|
return .requestParameters(parameters: [:], encoding: getEncoding())
|
|
}
|
|
}
|
|
|
|
var headers: [String : String]? {
|
|
let userToken = SPLoginManager.manager.token?.token ?? ""
|
|
|
|
var dic: [String : String] = [
|
|
"system-version" : kSP_osVersion,
|
|
"lang-key" : SPLocalizedManager.shared.currentLocalizedKey,//当前语言
|
|
"time-zone" : String.timeZone(), //时区
|
|
"app-version" : kSPAPPVersion,
|
|
"device-id" : JXUUID.systemUUID(), //设备id
|
|
"brand" : "apple", //品牌
|
|
"app-name" : "",
|
|
"system-type" : "ios",
|
|
"idfa" : JXUUID.idfa(),
|
|
"model" : UIDevice.sp_machineModelName(),
|
|
// "security" : "false",
|
|
]
|
|
//登录信息
|
|
dic["authorization"] = userToken
|
|
|
|
|
|
|
|
return dic
|
|
}
|
|
}
|
|
|
|
extension TargetType {
|
|
var sampleData: Data { return "".data(using: String.Encoding.utf8)! }
|
|
|
|
func getEncoding() -> ParameterEncoding {
|
|
switch self.method {
|
|
case .get, .delete:
|
|
return URLEncoding.default
|
|
default:
|
|
return JSONEncoding.default
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|