представление списка не обновляется в быстром пользовательском интерфейсе - PullRequest
0 голосов
/ 07 августа 2020

Я запустил проект в swiftUI. Я получаю данные от веб-сервисов, добавляемых в список массивов, когда я меняю данные в бэкэнде, но представление списка не обновляется.

import Foundation
import SwiftUI
import Combine

var orders_List: [OrdersModel] = []

struct OrdersModel: Identifiable,Hashable{
    
    var id: String = UUID().uuidString
    let order_no: String
    let seat_name: String
    let seat_no: String
    let time: String
    
    init(id: String, order_no: String,seat_name:String,seat_no:String,time:String){
        self.id = id
        self.order_no = order_no
        self.seat_name = seat_name
        self.seat_no = seat_no
        self.time = time
    }
    
}

class Order_Manager: ObservableObject {
    
    var objectWillChange = ObservableObjectPublisher()
    
    var fetchedSongsResults = [orders_List] {
        willSet {
            objectWillChange.send()
        }
    }
    
    init() {
        
        fetch_orders()
    }
    
    func fetch_orders() {
        let defaults = UserDefaults.standard
        
        let parameters = ["tokken": "a56af0a01e137f61a44a93398195f5db","order_status":"Submitted"]
        guard let url = URL(string: "https://www.appvelo.com/golfcourseios/api/OrderApis/fetch_status_based_orders") else { return }
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else { return }
        request.httpBody = httpBody
        
        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: .allowFragments) as! [String:Any]
                    let posts = json["data"] as? [[String: Any]] ?? []
                    orders_List.removeAll()
                    for result in posts {
                        //print(json)
                        
                        let id = result["id"] as! String
                        let order_no = result["order_no"] as! String
                        let seat_no = result["order_no"] as! String
                        let seat_name = result["seat_type_image"] as! String
                        let time = result["time"] as! String
                        
                        let order_Model = OrdersModel(id: id,order_no: order_no, seat_name: seat_name, seat_no: seat_no,time:time)
                        orders_List.append(order_Model)
                        // print(order_Model)
                    }
                } catch {
                    print(error)
                }
            }
            
        }.resume()
    }
}



struct ContentView: View {

    var body: some View {
        VStack{
            List {
                ForEach(orders_List){ person in
                    Text("\(person.order_no)")
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 07 августа 2020

Как упоминалось в комментариях, вам необходимо исправить синтаксис Combine:

class Order_Manager: ObservableObject {
    @Published var fetchedSongsResults = [orders_List]
}

Вам нужно удалить var objectWillChange = ObservableObjectPublisher()

...