Я получаю информацию из своего 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
Пожалуйста, убедитесь, что ваши модальные ключи совпадают с данными API.
@bjorn.lau Здесь я не могу назначить задачи с данными, поступающими из сеанса URL. Вот в чем проблема, помогите пожалуйста
@AnupKumarMishra, да, модальные клавиши хороши, я получаю ответ в консоли.
У вас есть Codable
модели, но вы используете JSONSerialization
вместо JSDecoder
? Уточните свой вопрос.
@Larme, как присвоить опубликованное свойство значению json из данных URL-сессии здесь? Так что мой взгляд будет показан.. Как это сделать?
Вы хотя бы пытались искать это на SO? На это есть сотни ответов.
Нашел решение, я изменил свой сетевой класс, как показано ниже, и это сработало.
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()
}
}
Уточните, пожалуйста, в чем ваша конкретная проблема. Похоже, вы не пытаетесь присвоить todos вашим опубликованным переменным где-либо в вашей функции загрузки?