使用Alamofire Swift 4刷新

时间:2018-07-09 09:20:36

标签: ios swift xcode alamofire get-request

在我的应用程序上,我正在使用Alamofire实施拉动刷新,该刷新正在工作,但不幸的是没有带回任何数据。我究竟做错了什么?肯定有什么我想念的。

这是代码

我的班级EarthquakeListing

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

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()
}

2 个答案:

答案 0 :(得分:0)

在函数中添加Alamofire请求,并在refreshData()中调用它。对于首次加载数据,您可以在viewDidLoad()内部调用该函数(包含Alamofire请求)。

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()
}

答案 1 :(得分:-1)

使用以下代码更新您的方法:

@objc func refreshData() {
    // start refresh control
    self.refresh.beginRefreshing()

    // get data from server
    Alamofire.request("http://www.seismicportal.eu/fdsnws/event/1/query?limit=50&format=json").responseJSON { response in
        if let data = response.data {
            do {
                self.earthquake = try JSONDecoder().decode(Earthquake.self, from: data)

                // End refreshing and reload table
                self.refresh.endRefreshing()
                self.tableView.reloadData()
            }
            catch{}
        }
    }
}