您将如何在Swift中发送重复的HTTP请求?

您将如何在Swift中发送重复的HTTP请求?,swift,rest,http,httprequest,Swift,Rest,Http,Httprequest,我目前正在创建一个应用程序,它每10秒从http请求中获取OHLC(开放、高、低、关闭)财务数据 我的http请求功能包含在http请求的完成处理程序中,如下所示: HTTPRequest.requestOHLC(符号:“XBTUSD”){ohclData in //做点什么 } 我试图找出在后台发送重复请求的最佳方式 我已经尝试设置了10秒延迟的while循环,如下所示: while(true){ HTTPRequest.requestOHLC(符号:“XBTUSD”){ohclData i

我目前正在创建一个应用程序,它每10秒从http请求中获取OHLC(开放、高、低、关闭)财务数据

我的http请求功能包含在http请求的完成处理程序中,如下所示:

HTTPRequest.requestOHLC(符号:“XBTUSD”){ohclData in
//做点什么
}
我试图找出在后台发送重复请求的最佳方式

我已经尝试设置了10秒延迟的while循环,如下所示:

while(true){
HTTPRequest.requestOHLC(符号:“XBTUSD”){ohclData in
//做点什么
}
睡眠(10)
}
我相信这是行不通的,因为HTTP请求是异步的,或者sleep函数的作用超出了我的理解。 如果有人知道正确的方法来做这件事,这将是非常有帮助的,因为我是相当新的使用互联网协议。这似乎应该是一件相当容易的事情。 此应用程序的使用方式是,当当前视图控制器打开时,http请求需要不断发送,并在视图控制器更改时停止发送

目前,我正在测试viewDidLoad()函数的末尾

这可能是你的问题<代码>睡眠只是将当前线程暂停指定的秒数,而阻止主线程是个坏主意。主线程是应用程序的主事件循环,如果此线程被阻止,则应用程序将无法响应事件并显示为冻结。您的网络请求可能正在等待主事件循环,而主事件循环永远无法处理它们,因为它一直在等待
viewDidLoad
完成

此问题的最佳解决方案通常是
计时器
,它可以在经过一段时间间隔后运行代码。下面是一个例子:

// In your view controller:
var ohlcTimer: Timer?

override func viewDidLoad() {
    super.viewDidLoad()
    //...

    ohlcTimer = Timer.scheduledTimer(withTimeInterval: 10, repeats: true) { timer in
        HTTPRequest.requestOHLC(symbol: "XBTUSD"){ ohclData in
            //do something      
        }
    }
    ohlcTimer!.fire() //cause the timer to fire once now -- it's first scheduled firing will happen in 10 seconds
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    ohlcTimer?.invalidate()
    ohlcTimer = nil
}

你说的“不工作”是什么意思?这是一个iOS应用程序吗?requestOHLC的代码是什么?@NobodyNada是的,这是iOS的。HTTP请求在while循环中似乎永远不会被调用。requestOHLC的代码调用Alamofire库中的HTTP请求方法,并返回我自己的包含一组双变量的结构,我不认为这是问题所在,因为代码在循环外工作正常循环在哪里?它是在主线程上运行,还是在某个对象的回调中运行,还是在后台调度队列上运行,还是什么?@NobodyNada目前,我正在测试viewDidLoad()函数的末尾