Swift:停止方法完成

时间:2017-02-16 18:31:43

标签: ios swift

用户在我的应用中根据名称搜索城市,之后我会从不同来源拨打多个API来获取有关城市的信息。

我想添加一个“停止”按钮,以便用户可以停止搜索,例如,如果他们的wifi连接错误并且搜索时间过长。我有不同方法的API调用,所以当用户单击“停止”按钮时,我不知道哪个正在运行。

当用户点击停止时,是否有人熟悉停止所有功能甚至只是在应用中运行的API调用的方法?

我在下面提到了我提出的解决方案,但想知道是否有人有更优雅的解决方案。

1 个答案:

答案 0 :(得分:0)

我建议的解决方案是有两个存储时间戳的变量,一个永久变量和另一个在用户点击搜索时调用的action方法中创建的变量。它的工作原理如下:

  • 用户点击搜索
  • 使用搜索的确切时间保存永久变量:2017_02_16_4:35:26(日期和时间到秒),在操作方法中创建的变量与永久变量匹配
  • 一旦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发生,但两个调用都将被发生。