アドレスまたは IP の到達可能性をチェックする Swift 1.2 で記述された関数があります。ここにあります :
func isHostConnected(hostAddress : String) -> Bool
{
var response : NSURLResponse?
let request = NSMutableURLRequest(URL: NSURL(string: hostAddress)!)
request.timeoutInterval = 3
let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: nil)
return ((response as? NSHTTPURLResponse)!.statusCode == 200)
}
は廃止されたため、NSURLConnection
Xcode の提案に従って、 を使用して記述しようとしNSURLSession.dataTaskWithRequest
ましたが、次のとおりです。
func isHostConnected(hostAddress : String) -> Bool
{
let request = NSMutableURLRequest(URL: NSURL(string: hostAddress.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!)!)
request.timeoutInterval = 3
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: nil, delegateQueue: NSOperationQueue.mainQueue())
var responseCode = -1
session.dataTaskWithRequest(request, completionHandler: {(data : NSData?, response : NSURLResponse?, error : NSError?) -> Void in
responseCode = (response as? NSHTTPURLResponse)!.statusCode
})!.resume()
return (responseCode == 200)
}
上記のコードは、別のスレッドで実行されるため、常にfalse (明らか)を返します。completionHandler
私の懸念は、 MainThread をブロックすることによってcompletionHandler()
何らかの方法で MainThread で実行できるかというsendSynchronousRequest
ことです。
ここで「Apple's Reachabilty」を使用しない理由があります。
どんな提案も役に立ちます。:)