Swift URLRequest のタイムアウトを発生させる

URLRequest のリクエストがタイムアウトになった時の動作をみたい時がある。

そういう時は URLRequest の initializer で timeoutinterval をとても小さな値(たとえば 0.0001 秒とか)にすると、タイムアウトを発生させて、動作を試すことができる。

こんな感じだ。

let url = URL(string: "URL")!
let req = URLRequest(url: url,
                     cachePolicy: .reloadIgnoringLocalAndRemoteCacheData,
                     timeoutInterval: 0.0001)   // すぐタイムアウト発生する

let task = URLSession.shared.dataTask(with: req) { data, response, error in

    if let err = error as NSError? {
        if err.domain == NSURLErrorDomain,
            err.code == NSURLErrorTimedOut {
            // タイムアウト発生
        }
        return
    }
}

task.resume()