ios - iOS Swift 停止重复的 HTTP 请求
问题描述
我是 Swift 的新手,我正在使用 Swift 4。我有一个动作,当点击一个按钮时发送一个 HTTP 请求。在后端,它将记录插入数据库。所有这些都能正常工作,但有时即使我在 Swift 发送 HTTP 请求 2 或 3 次后点击按钮,然后我得到重复记录。有没有办法阻止它?这是我的简单代码
@IBAction func submitAction(_ sender: Any) {
let url:URL = URL(string:ConnectionString+"insert_location")!
var myName = ""
TableSource.isHidden = true
let session = URLSession.shared
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.cachePolicy = NSURLRequest.CachePolicy.reloadIgnoringCacheData
if let fullname = UserDefaults.standard.string(forKey: "fullname") {
myName = fullname
} else {
myName = "UnKnown"
}
let address = "Unknown"
let location = Location[0]
let parameter = "location=\(location)&latitude=\(latitude!)&longitude=\(longitude!)&name=\(namePlaceStreet.text!)&address=\(address)&profile_id=\(MYID)&fullname=\(myName)"
request.httpBody = parameter.data(using: String.Encoding.utf8)
session.dataTask(with:request, completionHandler: {(data, response, error) in
if error != nil {
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! [String:Any]
if let Streams = parsedData["result"] as? [AnyObject] {
DispatchQueue.main.async {
for Stream in Streams {
if let notification = Stream["outcome"] as? String {
self.coordinates.isHidden = false
self.coordinates.text = String(notification)
self.submitButton.isHidden = true
self.namePlaceStreet.isHidden = true
self.topLabel.isHidden = true
}
}
}
}
} catch let error as NSError {
print(error)
}
}
}).resume()
}
解决方案
此代码是异步的,因此最好添加一个活动指示器开始操作并在成功/错误中将其删除,或者禁用按钮
@IBAction func submitAction(_ sender: UIButton) {
guard sender.isEnabled else { return } // in case for a messy outlet connection
sender.isEnabled = false
.....
DispatchQueue.main.async {
sender.isEnabled = true
}
}
多次单击它是预期的 UX,因此您需要处理它
推荐阅读
- laravel - 多租户内的 Laravel Api 多租户
- solr - 确定用于 Hybris 的当前 Solr 当前内核
- google-apps-script - 在域中安装 Gmail 插件不起作用
- vue.js - 使用 axios 提交 POST 请求时出错
- pug - 模板引擎很棘手
- libreoffice - LibreOffice 计算公式:根据已知数据查找给定数据的值
- ios - 尝试在 for in 循环中更改值
- python - 使用 forloop 从数据框创建 df
- c# - 发布 webapi 后选择哪一个
- javascript - 如何在 JavaScript 中合并两个 for..of 循环?