sách gpt4 ai đã đi

ios - 多部分请求 - 使用 UIImage 进行编码的结构

In lại 作者:行者123 更新时间:2023-11-29 05:26:01 28 4
mua khóa gpt4 Nike

使用 Swift 5,我试图减少很多依赖项(Alamofire),并且我试图了解如何在使用 Codable 和 URLRequest 时执行多部分请求

我的代码可以正常工作,可以创建具有名称和电子邮件的用户,但我需要向结构中添加头像。

添加头像后,如何对结构进行编码才能成为多部分请求。我在网上找到了一些解决方案,但不适用于我正在尝试实现的场景。

下面的代码是没有头像的请求的工作代码。

struct User: Codable {
let name: String
let email: String?
}
var endpointRequest = URLRequest(url: endpointUrl)
endpointRequest.httpMethod = "POST"
endpointRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
LÀM {
endpointRequest.httpBody = try JSONEncoder().encode(data)
} catch {
onError(nil, error)
trở lại
}


URLSession.shared.dataTask(
with: endpointRequest,
completionHandler: { (data, urlResponse, error) in
DispatchQueue.main.async {
self.processResponse(data, urlResponse, error, onSuccess: onSuccess, onError: onError)
}
}).resume()

1 Câu trả lời

UIImage 不符合 Codable,但您可以对 pngData 表示形式进行编码。然而,这需要实现Codablephương pháp

struct User: Codable {
let name: String
let email: String?
var avatar : UIImage?

private enum CodingKeys : String, CodingKey { case name, email, avatar }

init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
email = try container.decodeIfPresent(String.self, forKey: .email)
if let avatarData = try? container.decode(Data.self, forKey: .avatar) {
avatar = UIImage(data: avatarData)
}
}

func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(name, forKey: .name)
try container.encode(email, forKey: .email)
if let avatarImage = avatar {
try container.encode(avatarImage.pngData(), forKey: .avatar)
}
}
}

或者将avatar声明为URL并单独发送图像

关于ios - 多部分请求 - 使用 UIImage 进行编码的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58164376/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com