LENLY-LAB

>>>>

ЧАСТЫЕ ВОПРОСЫ

SWIFTUI

SwiftUI: как сделать POST запрос к серверу, возвращающему json

import SwiftUI


struct infoS: Codable,Hashable{

let name:String

let image: String

let id:String


}//эта структура должна точно соответствовать возвращаемому json


struct reqS: Codable,Hashable{

let id:Int

let name: String


}// это передаваемый json методом post


class ApiView:ObservableObject{

@Published var infoSite:[infoS] = []


func fetch(){

let param:reqS = .init(id: 1, name: "jack")//запрос

guard let url = URL(string:"https://image.su/dataCC") else{return}

var request = URLRequest(url: url)

request.httpMethod = "POST"

request.addValue("application/json", forHTTPHeaderField: "Content-Type")


do {request.httpBody=try JSONEncoder().encode(param)


} catch let error {print(error.localizedDescription)}

request.addValue("application/json", forHTTPHeaderField: "Content-Type")


let task = URLSession.shared.dataTask(with: request) {(data,response,error) in guard let data = data, error == nil else {return}

// Covert to JSON

do{let infoSite = try JSONDecoder().decode([infoS].self,from: data)

DispatchQueue.main.async {self.infoSite=infoSite}

}catch{print(error)}

}

task.resume()

}

}

А вот так можно использовать данные этого view

struct ContentView: View {

@StateObject var apiView = ApiView()

var body: some View {


ForEach(apiView.infoSite,id:\.self){infoS in

if(infoS.id=="1") {


Text("\(infoS.name)")

}}

}

}


И просто запрос без передачи параметров (например, для получения фото)


private func fetchData(){guard let url = URL(string: urlString) else {return}

let task = URLSession.shared.dataTask(with: url) { data, _, _ in self.data = data}

task.resume()}}

Связаться с нами

Web-studio LENLY-LAB

Email: task@lenly-lab.ru

г. Москва