ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SwiftUI GET & POST request, 예제 1
    GET & 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

    댓글

Designed by Tistory.