使用此 package 以便更轻松地使用 Combine
URLSession。我们支持对所有主要的 HTTP
方法 GET
、POST
、PUT
和 DELETE
使用 Codable
。 我们也支持 MultipartUpload
要安装此 package,只需将以下内容添加到您的 package 中
.package(url: "https://github.com/DanielMandea/url-session-combine.git", from: "1.0.0"),
定义 SomeService 示例
class SomeService: BaseService {
// MARK: - Session
let sessionProvider: SessionProvider
// MARK: - Init
init(api: API = ServiceConfiguration.api, sessionProvider: SessionProvider = DefaultSessionProvider(authenticatorProvider: Authenticator())) {
self.sessionProvider = sessionProvider
super.init(api: api)
}
func get<T: Codable>(for path: String, headers: [String: String] = ["Content-Type":"application/json"], decoder: JSONDecoder = JSONDecoder.iso8601JsonDecoder) -> AnyPublisher<T, Error> {
Publishers.CombineLatest(just(path: path), sessionProvider.jwt()).flatMap {
self.get(from: $0, headers: self.merge(jwt: $1, with: headers), decoder: decoder)
}.eraseToAnyPublisher()
}
}
调用 SomeService 示例
get(for: "somepath/", decoder: JSONDecoder.iso8601FullDateJsonDecoder)
Multipart Upload 示例
Publishers.CombineLatest(just(path: athletes), sessionProvider.jwt()).map {
URLRequest.multipart(for: $0,
method: .POST,
headers: ["Authorization": $1, "Accept-Encoding": "gzip, deflate, br"],
payload: value,
multiparts: [Multipart(key: "profilePhoto", data: profileImageData, mimeType: .jpeg, fileName: "\(UUID().uuidString).jpeg")],
encoder: JSONEncoder.iso860JSONEncoder,
decoder: JSONDecoder.iso8601FullDateJsonDecoder)
}.flatMap {
self.task(for: $0, decoder: JSONDecoder.iso8601FullDateJsonDecoder)
}
.eraseToAnyPublisher()