Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift-如何获得上传速度而不是下载速度?_Ios_Swift_Performance_Upload_Download Speed - Fatal编程技术网

Ios Swift-如何获得上传速度而不是下载速度?

Ios Swift-如何获得上传速度而不是下载速度?,ios,swift,performance,upload,download-speed,Ios,Swift,Performance,Upload,Download Speed,我想知道如何在swift中获得上传速度 事实上,我从 但我认为,这段代码是关于下载速度的(如果我错了,请告诉我) 对不起,我重复一遍,但如何获得上传速度 致以最良好的祝愿好吧,你需要上传一些东西到某个地方,并对其进行测量。到底是什么问题?谢谢你的回答。是的,我想测量,但如何测量?你的问题是,下载已知大小的东西很容易;在本例中,是来自苹果网站的图像。要确定上传速度,您需要一个服务器,您可以将已知大小的文件上传到该服务器;你不可能免费找到这样的东西。谢谢,我理解。假设我可以上传一个文件到服务器上,原

我想知道如何在swift中获得上传速度

事实上,我从

但我认为,这段代码是关于下载速度的(如果我错了,请告诉我)

对不起,我重复一遍,但如何获得上传速度


致以最良好的祝愿

好吧,你需要上传一些东西到某个地方,并对其进行测量。到底是什么问题?谢谢你的回答。是的,我想测量,但如何测量?你的问题是,下载已知大小的东西很容易;在本例中,是来自苹果网站的图像。要确定上传速度,您需要一个服务器,您可以将已知大小的文件上传到该服务器;你不可能免费找到这样的东西。谢谢,我理解。假设我可以上传一个文件到服务器上,原理和下载速度一样吗?测量上传速度:ByteReceived/(CurrentTIme-StartTime)/1024/1024,以MB为单位测量上传速度?有人能帮我用Swift计算上传速度吗?你需要在某处上传一些东西并测量一下。到底是什么问题?谢谢你的回答。是的,我想测量,但如何测量?你的问题是,下载已知大小的东西很容易;在本例中,是来自苹果网站的图像。要确定上传速度,您需要一个服务器,您可以将已知大小的文件上传到该服务器;你不可能免费找到这样的东西。谢谢,我理解。假设我可以上传一个文件到服务器上,原理和下载速度一样吗?测量上传速度:ByteReceived/(CurrentTIme-StartTime)/1024/1024,以MB为单位测量上传速度?有人能帮我以Swift为单位计算上传速度吗?
class SpeedTest: UIViewController, URLSessionDelegate, URLSessionDataDelegate {


    typealias speedTestCompletionHandler = (_ megabytesPerSecond: Double? , _ error: Error?) -> Void

    var speedTestCompletionBlock : speedTestCompletionHandler?

    var startTime: CFAbsoluteTime!
    var stopTime: CFAbsoluteTime!
    var bytesReceived: Int!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        checkForSpeedTest()

    }

    func checkForSpeedTest() {

        testDownloadSpeedWithTimout(timeout: 5.0) { (speed, error) in
            print("Download Speed:", speed ?? "NA")
            print("Speed Test Error:", error ?? "NA")
        }

    }

    func testDownloadSpeedWithTimout(timeout: TimeInterval, withCompletionBlock: @escaping speedTestCompletionHandler) {

        guard let url = URL(string: "https://images.apple.com/v/imac-with-retina/a/images/overview/5k_image.jpg") else { return }

        startTime = CFAbsoluteTimeGetCurrent()
        stopTime = startTime
        bytesReceived = 0

        speedTestCompletionBlock = withCompletionBlock

        let configuration = URLSessionConfiguration.ephemeral
        configuration.timeoutIntervalForResource = timeout
        let session = URLSession.init(configuration: configuration, delegate: self, delegateQueue: nil)
        session.dataTask(with: url).resume()

    }

    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        bytesReceived! += data.count
        stopTime = CFAbsoluteTimeGetCurrent()
    }

    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {

        let elapsed = stopTime - startTime

        if let aTempError = error as NSError?, aTempError.domain != NSURLErrorDomain && aTempError.code != NSURLErrorTimedOut && elapsed == 0  {
            speedTestCompletionBlock?(nil, error)
            return
        }

        let speed = elapsed != 0 ? Double(bytesReceived) / elapsed / 1024.0 / 1024.0 : -1
        speedTestCompletionBlock?(speed, nil)

    }

}