用户在我的应用中根据名称搜索城市,之后我会从不同来源拨打多个API来获取有关城市的信息。
我想添加一个“停止”按钮,以便用户可以停止搜索,例如,如果他们的wifi连接错误并且搜索时间过长。我有不同方法的API调用,所以当用户单击“停止”按钮时,我不知道哪个正在运行。
当用户点击停止时,是否有人熟悉停止所有功能甚至只是在应用中运行的API调用的方法?
我在下面提到了我提出的解决方案,但想知道是否有人有更优雅的解决方案。
答案 0 :(得分:0)
我建议的解决方案是有两个存储时间戳的变量,一个永久变量和另一个在用户点击搜索时调用的action方法中创建的变量。它的工作原理如下:
一旦API调用完成,但在segue显示新信息被触发之前,我将检查以确保两个变量仍然同步
如果用户点击停止按钮,我会将永久变量更改为单击停止按钮的时间,并且不会执行segue,因为这两个变量不匹配。
var permanentTimestamp = String()
@IBAction func searchButton(_ sender: Any) {
permanentTimestamp = // whatever the current time is
self.beginAPICalls()
}
func beginAPICalls() {
let uniqueCallTimestamp = permanentTimestamp
//... perform API calls and get information
if uniqueCallTimestamp == permanentTimestamp {
// perform segue
} else {
// the segue won't be triggered and the user can search again without having two searches go through
}
}
我考虑过只使用布尔值,但潜在的问题是如果用户有互联网连接,但速度非常慢。用户可以搜索(bool = true),单击Stop(bool = false),然后在第一组API调用完成之前再次单击Search(bool = true)。现在bool是真的允许segue发生,但两个调用都将被发生。