2016-09-27 14 views
1

私はSwingアプリケーションで待ち時間を得るためにSimplePingを使用していますが、結果はありません。 Swift SimplePingが機能しません

この

は、ここでは例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)) 
    } 
} 

そして、私のViewControllerにSimplePingを呼び出すために私がやること:私はこの行にブレークポイントを置く

let simplePingClient = SimplePingClient() 
     simplePingClient.pingHostname("www.apple.com") { latency in 
     print("Your latency is \(latency ?? "unknown")") 
     self.labelTempsReponse?.text = latency 
     } 

simplePingClient.pingHostname("www.apple.com") { latency in 

すべての結果はnil(resultCallBack、pingClientおよびdateReference)です。私はこの問題を解決するために研究を行いました。私はquestionが似ていますが、目的はcです。

誰でも教えてください。

答えて

0

simplePingClientが有効範囲外になる可能性がありますか?この場合、simplePingはシャットダウンします。 グローバル変数として宣言してください:

var simplePingClient : SimplePingClient! 

してから、この作業をする必要があります:

simplePingClient = SimplePingClient() 
    simplePingClient.pingHostname("www.apple.com") { latency in 
    print("Your latency is \(latency ?? "unknown")") 
    self.labelTempsReponse?.text = latency 
    } 
関連する問題