首页 > 解决方案 > Swift:SimplePing 计时器未触发

问题描述

我正在尝试使用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)
    }

标签: swiftping

解决方案


使用您选择的 API,您有责任在 runloop 上安排计时器(您没有安排)。

调度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)
}

推荐阅读