在列表视图中切换排序

时间:2020-06-17 07:52:14

标签: json list sorting swiftui toggle

我将'Api'用作ObervableObject,并在其中@Switched var isAscd进行切换。函数getPost从Web提取JSON数据并填充为列表视图。我使用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()
                        }
                    }
                }

0 个答案:

没有答案