首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Swift中向使用Combine发出的HTTP GET请求添加正文?

如何在Swift中向使用Combine发出的HTTP GET请求添加正文?
EN

Stack Overflow用户
提问于 2020-03-28 02:15:42
回答 1查看 1K关注 0票数 0

我正在使用Combine发出HTTP GET请求,但我不知道如何添加正文。我知道在GET请求中包含主体是不好的,但我真的需要测试一些东西。我使用的是Xcode11.4和iOS 13.4。堆栈溢出不允许我发布这个问题,除非我写一些更多的信息,但我想不出你可能需要更多的信息。下面是我的代码:

代码语言:javascript
运行
复制
import Foundation
import Combine
//MARK: - Object to retrieve from JSON
struct Doctor: Codable, Identifiable {
    let id = UUID()
    let patients: [Patients]
}
struct Patients: Codable, Identifiable {
    let id: String
    let name: String
    let phone: String
    enum CodingKeys: String, CodingKey {
        case id = "_id"
        case name
        case phone
    }
}
class Network {
  enum Error: LocalizedError {
    case invalidResponse
    case addressUnreachable(URL)
    var errorDescription: String? {
      switch self {
      case .invalidResponse:
        return "The server responded with garbage."
      case .addressUnreachable(let url):
        return "\(url.absoluteString) is unreachable."
      }
    }
  }
  let urlRequest = URL(string: URL)!
  let networkQueue = DispatchQueue(label: "Networking",
                                   qos: .default,
                                   attributes: .concurrent)
  func downloadPatients() -> AnyPublisher<Doctor, Error> {
    URLSession.shared
      .dataTaskPublisher(for: urlRequest)
      .receive(on: networkQueue)
      .map(\.data)
      .decode(type: Doctor.self, decoder: JSONDecoder())
      .mapError { (error) -> Network.Error in
        switch error {
        case is URLError:
          return Error.addressUnreachable(self.urlRequest)
        default:
          return Error.invalidResponse
        }
    }
    .eraseToAnyPublisher()
  }
}
let networkRequest = Network()
 func loadPatients() {
       cancelable = networkRequest.downloadPatients()
            .sink(
                receiveCompletion: {
                receiveValue: { doctor in
                    self.localPatients = doctor.patients
                    self.isShowing = false
            }
        )
    }

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-03-28 02:35:06

我不确定是否可以在Get中使用dataTaskPublish。但是您可以使用这种调用自定义您的请求:

代码语言:javascript
运行
复制
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.httpBody = body
request.setValue("application/json", forHTTPHeaderField: "Content-Type")

URLSession.shared.dataTask(with: request) { (data, response, error) in
    if let error = error {
        // Handle the error here
    }
    guard let data = data else { return }

    let resData = try! JSONDecoder().decode(ServerMessage.self, from: data)
}.resume()

}

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60891870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档