UserDefaults save String -> Попытка установить объект списка не свойств (Function) как NSUserDefaults / CFPreferences - PullRequest
0 голосов
/ 01 марта 2019

Я получаю сообщение об ошибке выше при получении UserDefaults.Я сохранил значение в виде строки.TimeInterval преобразуется в строку.В чем проблема?

Код для сохранения строки:

let timeResponse:TimeInterval = NSDate.timeIntervalSinceReferenceDate - start

let JSONTransferTime = TimeInterval.toReadableString(timeResponse) //converting to String

UserDefaults.standard.set(JSONTransferTime, forKey:"JSONTranferTime")

Код для получения строки:

let JSONTransferTime: String = UserDefaults.standard.string(forKey: "JSONTranferTime")! as String

Utils.displayAlert(title: "JSON download time", message: JSONTransferTime)

Точное сообщение об ошибке:

[User Defaults] Attempt to set a non-property-list object (Function) as an NSUserDefaults/CFPreferences value for key JSONTranferTime

Коддля toReadableString:

extension TimeInterval {

func toReadableString() -> String {

    // Nanoseconds
    let ns = Int((self.truncatingRemainder(dividingBy: 1)) * 1000000000) % 1000
    // Microseconds
    let us = Int((self.truncatingRemainder(dividingBy: 1)) * 1000000) % 1000
    // Milliseconds
    let ms = Int((self.truncatingRemainder(dividingBy: 1)) * 1000)
    // Seconds
    let s = Int(self) % 60
    // Minutes
    let mn = (Int(self) / 60) % 60
    // Hours
    let hr = (Int(self) / 3600)

    var readableStr = ""
    if hr != 0 {
        readableStr += String(format: "%0.2dhr ", hr)
    }
    if mn != 0 {
        readableStr += String(format: "%0.2dmn ", mn)
    }
    if s != 0 {
        readableStr += String(format: "%0.2ds ", s)
    }
    if ms != 0 {
        readableStr += String(format: "%0.3dms ", ms)
    }
    if us != 0 {
        readableStr += String(format: "%0.3dus ", us)
    }
    if ns != 0 {
        readableStr += String(format: "%0.3dns", ns)
    }

    return readableStr
}

}

Заполнена переменная JSONTransferTime:

Alert to show downloadtime

1 Ответ

0 голосов
/ 01 марта 2019

toReadableString() - это метод instance , вы должны вызывать его для timeResponse, а не для типа, который возвращает функцию, на которую, кстати, жалуется компилятор.

let jsonTransferTime = timeResponse.toReadableString()

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

...