Переключить сортировку в виде списка - PullRequest
1 голос
/ 17 июня 2020

Я использую Api в качестве ObervableObject, а внутри есть @Published var isAscd, который нужно переключить. Функция getPost fetch JSON data from web and populate - это список. Я использую кнопку в HeaderView для переключения метода сортировки. Компиляция выполнена успешно, но кнопка не выполняет никаких действий. Я не знаю, что пошло не так?

class Api: ObservableObject {
    @Published var posts: [Post] = []
    @Published var isAscd: Bool = false

    func getPosts(completion: @escaping ([Post]) -> ()) {
        guard let url = URL(string: getListURLString) else { return }
        URLSession.shared.dataTask(with: url) { (data, _, _) in
            let posts = try! JSONDecoder().decode([Post].self, from: data!)
            DispatchQueue.main.async {
                completion(posts)
            }



        }
        .resume()
    }

}


struct HeaderView: View {

    var holding: String = "市值/數量"
    var earning: String = "現價/成本"
    var profit: String = "持倉賺蝕"
    @ObservedObject var api = Api()



    var body: some View {
        HStack{
            Button(action: {
                self.api.isAscd.toggle()
                if self.api.isAscd {
                    self.api.posts.sort { $0.stockcode > $1.stockcode}
                } else { self.api.posts.sort { $0.stockcode < $1.stockcode}

                }
                print(self.api.posts.count)
                print(self.api.isAscd)


            }.......}

    List {

                Section(header: HeaderView())

                {
                    ForEach(posts)
                    { post in

                        HStack {

                            VStack(alignment: .leading)

..........

                    }
                }.frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: 250, alignment: .center)

                .onAppear {
                        Api().getPosts {(posts) in
                            self.posts = posts
                            //self.apr.isAscd.toggle()
                        }
                    }
                }
...