swift - 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)
}
解决方案
使用您选择的 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)
}
推荐阅读
- crash - 仅在 GDB 中调用的纯虚方法
- java - 删除由@JsonUnwrapped - RestController 导致的 json 中的重复键
- api - API 设计 - 新端点与新微服务
- tensorflow - `nvidia-smi` 之间的内存使用指标有什么区别`nvidia-smi dmon`
- c# - 使用斑马打印机 [ZPL] 在连续标签上打印带有页眉、正文和页脚的票据
- c# - 在 C# 中计算表的总记录数
- c# - ASP.NET Core API 错误:“路由超过允许的最大段数 28”
- flutter - 屏幕加载时地图不会绘制在用户位置上
- c# - Unity 3d,平滑提速(自动)
- javascript - 在字符串数组javascript中设置参数键