0
아래의 코드를 사용하여 Right way of determining internet speed in iOS 8 내 앱에서 속도 테스트를 수행하지만 테스트를 수행하고 속도 테스트 도구 http://www.speedtest.net/과 비교할 때 내 앱의 결과는 speedTest.net보다 절반 응용 프로그램의 속도 결과는 speedtest.net 결과가 2Mbps의 또는이다 1Mbps의 더swift3를 사용하여 다운로드 속도 테스트 앱을 만드는 가장 좋은 방법은 무엇입니까?
class ViewController: UIViewController, NSURLSessionDelegate, NSURLSessionDataDelegate {
override func viewDidLoad() {
super.viewDidLoad()
testDownloadSpeedWithTimout(5.0) { (megabytesPerSecond, error) ->() in
print("\(megabytesPerSecond); \(error)")
}
}
var startTime: CFAbsoluteTime!
var stopTime: CFAbsoluteTime!
var bytesReceived: Int!
var speedTestCompletionHandler: ((megabytesPerSecond: Double?, error: NSError?) ->())!
func testDownloadSpeedWithTimout(timeout: NSTimeInterval, completionHandler:(megabytesPerSecond: Double?, error: NSError?) ->()) {
let url = NSURL(string: "http://insert.your.site.here/yourfile")!
startTime = CFAbsoluteTimeGetCurrent()
stopTime = startTime
bytesReceived = 0
speedTestCompletionHandler = completionHandler
let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
configuration.timeoutIntervalForResource = timeout
let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
session.dataTaskWithURL(url).resume()
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
bytesReceived! += data.length
stopTime = CFAbsoluteTimeGetCurrent()
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
let elapsed = stopTime - startTime
guard elapsed != 0 && (error == nil || (error?.domain == NSURLErrorDomain && error?.code == NSURLErrorTimedOut)) else {
speedTestCompletionHandler(megabytesPerSecond: nil, error: error)
return
}
let speed = elapsed != 0 ? Double(bytesReceived)/elapsed/1024.0/1024.0 : -1
speedTestCompletionHandler(megabytesPerSecond: speed, error: nil)
}
}