我有全速互联网,邮递员数据加载速度很快,但我的代码响应在 5 分钟后才出现,为什么?我哪里错了?我尝试了所有可能的方法来快速显示数据仍然面临问题。请在这里指导我
代码: 此代码响应将在 5 分钟后显示。最初我以为没有数据,但 5 分钟后显示数据。 我错在哪里?请指导我。
class APINetworkManagerMultipart: NSObject {
static let sharedInstance = APINetworkManagerMultipart()
fileprivate override init() {
super.init()
}
func serviceCallWithMultipartFormData<T: Codable>(
url: URL,
headers: [String: String]?,
parameters: [String: Any],
completion: @escaping (Result<T, Error>) -> Void
) {
var request = URLRequest(url: url)
request.httpMethod = "POST"
let token = "Bearer mytoken"
request.setValue(token, forHTTPHeaderField: "Authorization")
let boundary = "Boundary-\(UUID().uuidString)"
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let body = NSMutableData()
for (key, value) in parameters {
if let stringValue = value as? String {
body.append("--\(boundary)\r\n".data(using: .utf8)!)
body.append("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n".data(using: .utf8)!)
body.append("\(stringValue)\r\n".data(using: .utf8)!)
}
else if let data = value as? Data {
body.append("--\(boundary)\r\n".data(using: .utf8)!)
body.append("Content-Disposition: form-data; name=\"\(key)\"; filename=\"file\"\r\n".data(using: .utf8)!)
body.append("Content-Type: application/octet-stream\r\n\r\n".data(using: .utf8)!)
body.append(data)
body.append("\r\n".data(using: .utf8)!)
}
}
body.append("--\(boundary)--\r\n".data(using: .utf8)!)
request.httpBody = body as Data
if let customHeaders = headers {
for (key, value) in customHeaders {
request.setValue(value, forHTTPHeaderField: key)
}
}
DispatchQueue.global(qos: .background).async {
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
completion(.failure(error))
return
}
guard let data = data else {
completion(.failure(error!))
return
}
do {
let decodedData = try JSONDecoder().decode(T.self, from: data)
completion(.success(decodedData))
} catch {
completion(.failure(error))
}
}
task.resume()
}
}
}
并在 VIewcontroller 中使用这样的服务调用:
func genericFormdataCall(){
let urlStr = URL(string: "https://prg-name/dev/api/student/edit-profile")!
let parameters: [String: Any] = [
"dob": "2005-07-24",
"name": "Student",
"gender": "M",
"school_location": "TestLocation",
"school_name": "K V",
"grade": "12th grade",
"student_bio": "I am a student",
"profile_pic": nil
] as! [String : Any]
DispatchQueue.global().async {
APINetworkManagerMultipart.sharedInstance.serviceCallWithMultipartFormData(url: urlStr, headers: nil, parameters: parameters) { (result: Result<MultipartModel, Error>) in
switch result {
case .success(let response):
// Handle the successful response
self.formdataResponse = response
print("Response: \(response)")
case .failure(let error):
// Handle the error
print("Error: \(error)")
}
}
}
}
我已经尝试过你的最小代码。看来问题是 在
Result
上。我认为不能这样推断。我尝试添加一个名为 response
的参数。然后它就按预期工作了。
func serviceCallWithMultipartFormData<T: Codable>(
url: URL,
headers: [String: String]?,
parameters: [String: Any],
response: T.Type,
completion: @escaping (Result<T, Error>) -> Void
) {
...
}
请注意,您应该删除这个不必要的代码
Dispatqueue.global
。 dataTask
函数已经异步运行。如果将数据绑定到某些视图,您只需要在主线程上处理完成即可。