【问题标题】:Make a service call at regular interval of time in swift定期快速拨打服务电话
【发布时间】:2023-03-14 19:37:01
【问题描述】:

我是 swift 编程的新手,我不知道如何定期调用方法。我有一个用于服务调用的演示应用程序,但我不知道如何定期调用它。

【问题讨论】:

    标签: ios iphone swift


    【解决方案1】:

    你可以创建一个 NSTimer() 的对象,并像这样在确定的时间间隔内调用一个函数:

    var updateTimer = NSTimer.scheduledTimerWithTimeInterval(15.0, target: self, selector: "callFunction", userInfo: nil, repeats: true)
    

    这将每 15 秒调用一次 callFunction()。

    func callFunction(){
        print("function called")
    }
    

    【讨论】:

    • 请注意,当应用程序进入后台时,计时器将暂停。
    【解决方案2】:

    这是一个带有启动和停止功能的简单示例:

    private let kTimeoutInSeconds:NSTimeInterval = 60
    
    private var timer: NSTimer?
    
    func startFetching() {
      self.timer = NSTimer.scheduledTimerWithTimeInterval(kTimeoutInSeconds,
        target:self,
        selector:Selector("fetch"),
        userInfo:nil,
        repeats:true)
    }
    
    func stopFetching() {
      self.timer!.invalidate()
    }
    
    func fetch() {
      println("Fetch called!")
    }
    

    如果您收到unrecognized selector 异常,请确保您的类继承自 NSObject,否则计时器的选择器将找不到该函数!

    【讨论】:

      【解决方案3】:

      带块的计时器变体(iOS 10、Swift 4)

      let timer = Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { (timer) in
          print("I am called every 5 seconds")
      }
      

      别忘了调用invalidate方法

      timer.invalidate()
      

      GCD 方法(随着时间的推移会变得有点晚)

      func repeatMeWithGCD() {
          DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
              print("I am called every 5 seconds")
      
              self.repeatMeWithGCD()//recursive call
          }
      }
      

      不要忘记创建返回条件以防止stackoverflow错误

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 2012-04-07
        • 1970-01-01
        • 2017-12-21
        相关资源
        最近更新 更多