swift, как конвертировать компонент даты в двойной, чтобы получить скорость загрузки - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь проверить скорость загрузки, отправив изображение на сервер через FTP, я знаю, что оно не очень резкое, но у меня нет альтернативы.Проблема номер один в том, чтобы проверить время, этот код всегда дает мне 0 секунд, может быть, это правильно, а может и нет, но основной вопрос заключается в том, что я даже не могу разделить размер изображения в мегабайтах на время в секундах, поскольку прошедшее время выражается вdateComponent, как это сделать?

с использованием этого кода

func pushfileUpload() {
    print("uploading...")

    let startDate = NSDate()

    //*****************************************************************



    //find file in app bundle
    let imageChecked = findFileInBundle(nameWithNoEx: "image", extension: "jpg")
    //convert to Data
    let imageData = imageChecked.jpegData(compressionQuality: 1)
    //instanziate the class
    let ftpUploader = FTPUpload.init(baseUrl: Constants.kHostname, userName: Constants.kUsername, password: Constants.kPassword, directoryPath: Constants.kFolder)

    ftpUploader.send(data: imageData!, with: "image") { (result) in
        if result {
            print("result is \(result)")
        } else {
            print("no result")
        }
    }


    //*****************************************************************
    print("...uploaded")
    let endDate = NSDate()
    let difference = timeDifference(date1: startDate as Date, date2: endDate as Date)
//        print("Time difference is : \(difference)")


    //1 converto to string
    let differenceString = String(difference)
    //2 pick first 3 ints
    let array = differenceString.compactMap{Int(String($0))}
    //3 create new int
    let newInt = array[0...3]

    var newString = ""
    for i in newInt {
        newString.append(i.description)
    }
    var fromIntToString = Int(newString)

    fromIntToString = fromIntToString! * 1000

    let speed = 1500 / fromIntToString!
    print("speed: \(speed)")



}





func timeDifference(date1: Date, date2: Date) -> Int {

    let calendar = NSCalendar.current
    var compos:Set<Calendar.Component> = Set<Calendar.Component>()
    //        compos.insert(.second)
    compos.insert(.nanosecond)
    let difference = calendar.dateComponents(compos, from: date1, to: date2)
    //        print("diff in seconds= \(difference.second!)") // difference in seconds
    print("diff in nanoseconds = \(difference.nanosecond!)") // difference in nanoseconds

    let newValue = difference.nanosecond!

    return newValue
}

// UPADTED code

func pushfileUpload() {
    print("uploading...")

    let startDate = Date()

    //*****************************************************************
    //find file in app bundle
    let imageChecked = findFileInBundle(nameWithNoEx: "image", extension: "jpg")
    //convert to Data
    let imageData = imageChecked.jpegData(compressionQuality: 1)
    //instanziate the class
    let ftpUploader = FTPUpload.init(baseUrl: Constants.kHostname, userName: Constants.kUsername, password: Constants.kPassword, directoryPath: Constants.kFolder)

    ftpUploader.send(data: imageData!, with: "image") { (result) in
        if result {
            print("result is \(result)")
            //-----------------------------------------------------
            //Your code to calculate elapsed time belongs here
            let endDate = Date()
            let elapsed = endDate.timeIntervalSinceReferenceDate -
                startDate.timeIntervalSinceReferenceDate
            print("The download took \(elapsed) seconds.")
            print("speed is \(1500 / elapsed)")
            //-----------------------------------------------------
        } else {
            print("no result")
        }
    }}

печать на консоли

The download took 1.281269907951355 seconds.
speed is 1170.7135168720042

1 Ответ

0 голосов
/ 26 ноября 2018

Как уже говорили другие, вам нужно переместить свой код, который вычисляет общее время внутри вашего закрытия:

func pushfileUpload() {
    print("uploading...")

    let startDate = Date()

    //*****************************************************************
    //find file in app bundle
    let imageChecked = findFileInBundle(nameWithNoEx: "image", extension: "jpg")
    //convert to Data
    let imageData = imageChecked.jpegData(compressionQuality: 1)
    //instanziate the class
    let ftpUploader = FTPUpload.init(baseUrl: Constants.kHostname, userName: Constants.kUsername, password: Constants.kPassword, directoryPath: Constants.kFolder)

    ftpUploader.send(data: imageData!, with: "image") { (result) in
        if result {
            print("result is \(result)")
            //-----------------------------------------------------
            //Your code to calculate elapsed time belongs here
            let endDate = Date()
            let elapsed = endDate.timeIntervalSinceReferenceDate - 
               startDate.timeIntervalSinceReferenceDate
            print("The download took \(elasped) seconds."
            //-----------------------------------------------------
        } else {
            print("no result")
        }
    }

...

Как уже упоминалось, нет никаких причин для решенияс компонентами даты.Метод timeIntervalSinceReferenceDate дает вам счетчик секунд с двойной точностью для даты, поэтому легко вычислить даты, чтобы выяснить разницу между ними.Вы можете оценить разницу с количеством знаков после запятой.

...