ios - 使用 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()
}
解决方案
在函数中添加您的 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()
}
推荐阅读
- amazon-web-services - 专用链接与 VPC 对等互连
- outlook - Office-JS Outlook 插件
- javascript - 无法从生成的日期变量设置引导日历上的日期?
- machine-learning - 时间序列二分类
- javascript - 为什么我的 html 只加载我的两个 javascript 脚本之一?
- javascript - 在javascript中旋转图像一个SVG
- sql - 在 Postgresql 中使用 SQL 将数据行透视到标题
- reactjs - 两条相同的反应状态行返回不同的结果
- node.js - 使用 Nodejs 将数据发送到 header.ejs
- python - 我将如何制作一个 linkvertise 包装器