Swift:SimplePing计时器未触发

时间:2019-09-09 17:15:25

标签: swift ping

我正在尝试使用此解决方案iOS SimplePing delegates为我的SimplePing实现创建一个超时,但是它不起作用。 SimplePing库没有内置可完成此操作的东西。

我已经尝试在@objc func sendping()public func simplePing(_ pinger: SimplePing, didSendPacket packet: Data, sequenceNumber: UInt16)中输入计时器,因为我已经跟踪了计时器的进度,但是实际上从未在任何这些函数中触发过。

    public func simplePing(_ pinger: SimplePing, didSendPacket packet: Data, sequenceNumber: UInt16) {
        pingTimer = Timer(timeInterval: 1.0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: false)
    }

    @objc func sendPing() {
        self.pinger!.send(with: nil)
        pingTimer = Timer(timeInterval: 1.0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: false)
    }

这是timerFired()

    @objc func timerFired () {
        pingResponse = String(format: "Response = DID NOT RECIEVE LATENCY")
        print(pingResponse)
    }

1 个答案:

答案 0 :(得分:1)

使用您选择的API,您可以将计时器安排在运行循环中(不是您需要的时间)。

自调度 API是

pingTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: false)

或者使用更现代的基于闭包的API

pingTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { [weak self] timer in
    self?.pingResponse = String(format: "Response = DID NOT RECIEVE LATENCY")
    print(self?.pingResponse)
}