API метода POST с параметрами в swiftUI

Я получаю информацию из своего API с помощью метода POST, я включил здесь параметры. Я могу напечатать ответ в консоли, но для просмотра это довольно сложно. Здесь добавлен код, который я пробовал. Я ценю, если кто-то поможет мне сделать это.

Мой сетевой код идет здесь:

class HostApi: ObservableObject {
    
  @Published var todos = [HostsHome]()
  @Published var amenity = [AmenitiesHome]()
        
  func loadData() {
    let Url = String(format: Host_home)
    guard let serviceUrl = URL(string: Url) else {
      return
    }
    let parameters: [String : Any] = [
      "request" : ["email" : "xxxxxxxxxxx.com",
                   "starting" : 0,
                   "ending" : 10]
    ]
    var request = URLRequest(url: serviceUrl)
    request.httpMethod = "POST"
    request.setValue("Application/json", forHTTPHeaderField: "Content-Type")
    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) else {
      return
    }
    request.httpBody = httpBody
    request.timeoutInterval = 20
    let session = URLSession.shared
    session.dataTask(with: request) { data, response, error in
      if let data = data {
        do {
          let json = try JSONSerialization.jsonObject(with: data, options: .json5Allowed)
          print(json)
        } catch {
          print(error)
        }
      }
    }.resume()
  }
}

Код ContentView находится здесь:

struct Hosts_Home: View {
    
  @StateObject var viewModel = HostApi()
    
  var body: some View {
    ForEach(viewModel.todos, id: \.title) { todo in
      Text(todo.title!)
    }
      .onAppear {
        viewModel.loadData()
      }
  }
}
[![api[![parameters][1]][1]][2]


  [1]: https://i.stack.imgur.com/R5sBV.png
  [2]: https://i.stack.imgur.com/yMj0t.png

Уточните, пожалуйста, в чем ваша конкретная проблема. Похоже, вы не пытаетесь присвоить todos вашим опубликованным переменным где-либо в вашей функции загрузки?

bjorn.lau 03.02.2023 09:54

Пожалуйста, убедитесь, что ваши модальные ключи совпадают с данными API.

Anup Kumar Mishra 03.02.2023 10:19

@bjorn.lau Здесь я не могу назначить задачи с данными, поступающими из сеанса URL. Вот в чем проблема, помогите пожалуйста

Aroona 03.02.2023 10:36

@AnupKumarMishra, да, модальные клавиши хороши, я получаю ответ в консоли.

Aroona 03.02.2023 10:38

У вас есть Codable модели, но вы используете JSONSerialization вместо JSDecoder? Уточните свой вопрос.

Larme 03.02.2023 10:56

@Larme, как присвоить опубликованное свойство значению json из данных URL-сессии здесь? Так что мой взгляд будет показан.. Как это сделать?

Aroona 03.02.2023 11:00

Вы хотя бы пытались искать это на SO? На это есть сотни ответов.

workingdog support Ukraine 03.02.2023 11:13
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
0
7
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Нашел решение, я изменил свой сетевой класс, как показано ниже, и это сработало.

class HostApi: ObservableObject {
    
    @Published var todos = [HostsHome]()
    @Published var amenity = [AmenitiesHome]()
    
    func loadData() {
        let url = URL(string: Host_home)
        guard let requestUrl = url else { fatalError() }

        var request = URLRequest(url: requestUrl)
        request.httpMethod = "POST"
         
        let postString = "[email protected]&starting=0&ending=10";

        request.httpBody = postString.data(using: String.Encoding.utf8);

        let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
            do {
                if let todoData = data {
                    let decodedData = try JSONDecoder().decode([HostsHome].self, from: todoData)
                    DispatchQueue.main.async {
                        self.todos = decodedData
                        self.amenity = decodedData[0].amenities
                        
                        print(decodedData[0].propertyTypeGroup)
                    }
                } else {
                    print("No data")
                }
            } catch {
                print(error)
            }
        }
        task.resume()
    }
}

Другие вопросы по теме