Как отобразить данные запросов метода Post на экране симулятора Ios Swiftui?

#api #methods #swiftui

Вопрос:

Это файл Doc, созданный в Postman методом записи и URL «link/services.php». Это файл заголовка.

 @Headers({"Content-Type: application/json"})
        @POST("services.php")
        
Observable<Division> divisionListApi(@Body HashMap<String, String> map);
map.put("method", "My_List");
 

После Поколения Почтальонов Я Получил Это Ниже.

 {"err_code":9,
"message":"My List ",
"list":[
{"ForestDivision":"Yam(T)"},
{"ForestDivision":"Rewar(T)"},
{"ForestDivision":"Ro(T)"},
{"ForestDivision":"Bh(T)"},
{"ForestDivision":"Ka(T) "},
{"ForestDivision":"Ambal(T) "},
{"ForestDivision":"Fari(T)"}]
}
 

Я сделал запрос, отправив сообщение mehod, это правильный способ создания кода в
swiftui.

     import Foundation
    import  Combine
    
    struct  File: Decodable, Hashable {
        var error_code : Int
        var message : String
        var list : [lisst]
    }
    
    struct lisst: Decodable, Hashable {
        var ForestDivision: String
    }    
    
    class fetchResults : ObservableObject{
        
        @Published var fetchedRes : [lisst]?
    
    func getData(completion: @escaping (File) -> ()){
        print("Fetch")
    
        let parameters = "{ I dont Know }"
 

       let postData = parameters.data(using: .utf8)
        var request = URLRequest(url: URL(string: 
 "URl")!,timeoutInterval: Double.infinity)
    
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    
        request.httpMethod = "POST"
        request.httpBody = postData
    
        let task = URLSession.shared.dataTask(with: request) { (data, _, _) in
            let resultList = try! JSONDecoder().decode(File.self, from: data!)
                            print(" ")
                            print("ID: (resultList.error_code)")
                            print("VOLUME: (resultList.message)")
                            print("READINGS: (String(describing: resultList.list))")
                            print(" ")
            print("SUCCESS: Got data - (data! )")
            DispatchQueue.main.async {
                       completion(resultList)           // << here !!
                    }
        }
        task.resume()
    }
        
    }
 

Также как писать в представлении Swiftui.
Чтобы Правильно Работать в режиме списка.

     import SwiftUI
    import  UIKit
    
    struct DivisionList: View {    
        @ObservedObject var res = fetchResults()    
        var body: some View {    
            NavigationView {
                Text("Nothing Here")
                
                List(res.fetchedRes ?? [], id: .self) { resp in      // Error Here
                    ForEach(res.list, id: .self) { course in
                        VStack {
                            Text(res.for)                             // Error Here
                        }
                    }
                }                       
                .navigationBarTitle("Data")
                    .onAppear(perform: {
                        self.getData                                        // Error Here
                    })
            }
    
            }
        }    
    
    struct DivisionList_Previews: PreviewProvider {
        static var previews: some View {
            DivisionList()
        }
    }
 

Ответ №1:

   Create New Swift File Copy this Post Requests.  


   
    import Foundation
    import  Combine
    
    let postUrl = "Your URl"
    struct divisionList: Decodable, Identifiable {
      
        
        let id: Int
        let mesg: String
        let list: [FDivision]
        
            private enum CodingKeys: String, CodingKey {
                case id = "err_code"
                case mesg = "message"
                case list = "list"
            }
        
    }
    
    struct FDivision: Decodable, Hashable {
        let forestDivision: String
        
        private enum CodingKeys: String, CodingKey {
            case forestDivision = "ForestDivision"
        
        }
        
        init(data:String) {
            forestDivision = data
        }
        
    }
    
    
    class viewModal: ObservableObject {
        @Published var items = [FDivision]()

    func postData() {
        guard let serviceUrl = URL(string: postUrl) else { return }
        
        let parameters: [String: Any] = [
                "method": "Your Method Name"

        var request = URLRequest(url: serviceUrl)
        request.httpMethod = "POST"
        request.setValue("Application/json", forHTTPHeaderField: "Content-Type")
        guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: [])  else {
            return
        }
        request.httpBody = httpBody
        request.timeoutInterval = 20
        let session = URLSession.shared
        
            session.dataTask(with: request) { (data, response, error) in
                if let response = response {
                    print(response)
                }
                if let data = data {
                    do {
                        let json = try JSONSerialization.jsonObject(with: data, options: [])
                        if let dictionary = json as? [String:Any] {
                            if let arrList = dictionary["list"] as? [[String:Any]]{
                                for data in arrList{
                                    let model = FDivision(data: data["ForestDivision"] as! String)
                                    self.items.append(model)
                                }
                            }
                        }
                        print(json)
                    } catch {
                        print(error)
                    }
                    
    
                }
            }.resume()
            
            
        }
        
        
    }



 Create Now New Swiftui File. 

 

  import SwiftUI
  import  UIKit


struct DivisionList: View {

@ObservedObject var vm = viewModal()

    var body: some View {

        NavigationView {

            
            VStack {
                
               
                List(vm.items, id: .self) { item in
                    
                    Button(action: {}, label: {
                        Text(item.forestDivision).foregroundColor(.customGreen)
                    })
                    
                }
                
                
            }.navigationBarTitle("Data")
            .onAppear(perform: {
                vm.postData()
            })
                    }
                }
            }

struct DivisionList_Previews: PreviewProvider {
    static var previews: some View {
        DivisionList()
    }
}
 

Комментарии:

1. Пожалуйста, укажите дополнительную информацию в своем ответе. Как это написано в настоящее время, трудно понять ваше решение.

2. Если у вас есть какие-либо данные запроса метода post,то вы хотите создать какой-либо параметр, указанный в swift-файле «fdivision» с сеансом url. И теперь ваш метод публикации показан во время отладки точно так же, как получение данных, и теперь, если вы хотите отобразить свои данные на экране ios-симулятора, вам нужен новый файл Swiftui, в котором вы загружаете свои функциональные данные postdata, с помощью которого вы можете отображать свои данные в виде списка