首页 > 解决方案 > 使用 Alamofire Swift 4 拉取刷新

问题描述

在我的应用程序上,我正在使用 Alamofire 实现拉动刷新,它正在刷新但不幸的是没有带回任何数据。我究竟做错了什么?我肯定错过了一些东西。

这是代码

我的班级地震列表

var earthquake: Earthquake?
var refresh = UIRefreshControl()

viewDidLoad()

// Refresh Control
    //let refreshControl = UIRefreshControl()
    refresh.tintColor = UIColor.yellow
    refresh.addTarget(self, action: #selector(refreshData), for: UIControlEvents.valueChanged)

    if #available(iOS 10.0, *) {
        self.tableView.refreshControl = (self.refresh)
    } else {
        self.tableView.addSubview(self.refresh)
    }

阿拉莫火开viewDidLoad()

Alamofire.request("http://www.seismicportal.eu/fdsnws/event/1/query?limit=50&format=json").responseJSON { response in
        //print("Request: \(String(describing: response.request))")   // original url


        if let data = response.data{
            do {

                self.earthquake = try
                    JSONDecoder().decode(Earthquake.self, from: data)
                print("features data: \(String(describing: self.earthquake?.features))")
                // print("data: \(self.features.count)")
                self.tableView.reloadData()
                self.refresh.endRefreshing()
            }
            catch{}
        }
    }
}

和 objc 的函数

@objc func refreshData() {
    self.tableView.reloadData()
    self.refresh.endRefreshing()
}

标签: iosswiftxcodealamofireget-request

解决方案


在函数中添加您的 Alamofire 请求并在内部调用它refreshData()。对于第一次数据加载,您可以在viewDidLoad().

func myRequest() {
    // Alamofire request goest here.....

    /* Inside of Alamofire callback block */
       // Assign data to data source
       self.tableView.reloadData()
       if (self?.refresh.isRefreshing)! {
          self.refresh.endRefreshing()
       }
    /*--------*/
}

override func viewDidLoad() {
    super.viewDidLoad()
    myRequest()
}

@objc func refreshData() {
    myRequest()
}

推荐阅读