-
SwiftUI GET & POST request, 예제 1GET & POST 2022. 6. 29. 17:46
import SwiftUI
let getUrl = "https://jsonplaceholder.typicode.com/todos"
let postUrl = "https://jsonplaceholder.typicode.com/posts"
//Model
struct Model: Decodable{
let userId: Int
let id: Int
let title: String
let completed: Bool
}
struct PostModel: Decodable {
let userId: Int
let id: Int
let title: String
let body: String
}
//ViewModel
class ViewModel: ObservableObject{
@Published var items = [Model]()
func loadData(){
guard let url = URL(string: getUrl) else { return}
URLSession.shared.dataTask(with: url){ (data, res, err) in
do{
if let data = data {
let result = try JSONDecoder().decode([Model].self, from: data)
DispatchQueue.main.async {
self.items = result
}
} else {
print("no data")
}
} catch (let error){
print(error.localizedDescription)
}
}.resume()
}
func postData(){
guard let url = URL(string: postUrl) else { return}
let title = "foo"
let bar = "bar"
let userId = 1
let body: [String: Any] = ["title" : title, "body" : bar, "userId" : userId]
let finalData = try! JSONSerialization.data(withJSONObject: body)
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.httpBody = finalData
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
URLSession.shared.dataTask(with: request){ (data, res, err) in
do{
if let data = data {
let result = try JSONDecoder().decode(PostModel.self, from: data)
print(result)
} else {
print("no data")
}
} catch (let error){
print(error.localizedDescription)
}
}.resume()
}
}
struct ContentView: View {
@ObservedObject var viewModel = ViewModel()
var body: some View {
NavigationView{
VStack{
List(viewModel.items, id:\.id){item in
Text(item.title)
}
}.onAppear(perform: {
viewModel.loadData()
viewModel.postData()
})
.navigationTitle("DATAS")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Get 방식으로 불러온 리스트 Post 방식으로 불러온 결과 'GET & POST' 카테고리의 다른 글
Alamofire, Combine으로 POST 데이터 불러오기 (0) 2022.07.15 Post API 호출예 (0) 2022.07.12