Ich verwende SimplePing, um die Latenz in meiner schnellen Anwendung zu erhalten, aber ich bekomme kein Ergebnis.Swift SimplePing funktioniert nicht
Dies ist genommen Codeform hier ein Beispiel in SO:
import Foundation
public typealias SimplePingClientCallback = (String?)->()
public class SimplePingClient: NSObject {
static let singletonPC = SimplePingClient()
private var resultCallback: SimplePingClientCallback?
private var pingClinet: SimplePing?
private var dateReference: NSDate?
public static func pingHostname(hostname: String, andResultCallback callback: SimplePingClientCallback?) {
singletonPC.pingHostname(hostname, andResultCallback: callback)
}
public func pingHostname(hostname: String, andResultCallback callback: SimplePingClientCallback?) {
resultCallback = callback
pingClinet = SimplePing(hostName: hostname)
pingClinet?.delegate = self
pingClinet?.start()
}
}
extension SimplePingClient: SimplePingDelegate {
public func simplePing(pinger: SimplePing, didStartWithAddress address: NSData) {
pinger.sendPingWithData(nil)
}
public func simplePing(pinger: SimplePing, didFailWithError error: NSError) {
resultCallback?(nil)
}
public func simplePing(pinger: SimplePing!, didSendPacket packet: NSData!) {
dateReference = NSDate()
}
public func simplePing(pinger: SimplePing!, didFailToSendPacket packet: NSData!, error: NSError!) {
pinger.stop()
resultCallback?(nil)
}
public func simplePing(pinger: SimplePing, didReceiveUnexpectedPacket packet: NSData) {
pinger.stop()
resultCallback?(nil)
}
public func simplePing(pinger: SimplePing!, didReceivePingResponsePacket packet: NSData!) {
pinger.stop()
guard let dateReference = dateReference else { return }
//timeIntervalSinceDate returns seconds, so we convert to milis
let latency = NSDate().timeIntervalSinceDate(dateReference) * 1000
resultCallback?(String(format: "%.f", latency))
}
}
Und den SimplePing in meinem Viewcontroller nennen ich das tun:
let simplePingClient = SimplePingClient()
simplePingClient.pingHostname("www.apple.com") { latency in
print("Your latency is \(latency ?? "unknown")")
self.labelTempsReponse?.text = latency
}
Als ich in dieser Zeile einen Haltepunkt setzen :
simplePingClient.pingHostname("www.apple.com") { latency in
alle Ergebnisse gleich Null sind (die resultCallBack, die pingClient und die dateReference). Ich habe eine Recherche durchgeführt, um dieses Problem zu lösen, und ich fand eine question ähnlich meiner, aber in Ziel c.
Kann mir bitte jemand helfen?