Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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
Swift 用户默认保存字符串->;尝试将非属性列表对象(函数)设置为NSUserDefaults/CFPreferences_Swift_Nsuserdefaults_Nstimeinterval - Fatal编程技术网

Swift 用户默认保存字符串->;尝试将非属性列表对象(函数)设置为NSUserDefaults/CFPreferences

Swift 用户默认保存字符串->;尝试将非属性列表对象(函数)设置为NSUserDefaults/CFPreferences,swift,nsuserdefaults,nstimeinterval,Swift,Nsuserdefaults,Nstimeinterval,我在检索UserDefaults时收到上面的错误消息。我将值保存为字符串。时间间隔转换为字符串。 问题在哪里 保存字符串的代码: let timeResponse:TimeInterval = NSDate.timeIntervalSinceReferenceDate - start let JSONTransferTime = TimeInterval.toReadableString(timeResponse) //converting to String UserDefaults.st

我在检索UserDefaults时收到上面的错误消息。我将值保存为字符串。时间间隔转换为字符串。 问题在哪里

保存字符串的代码:

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)
用于检索字符串的代码:

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变量已填充:

toReadableString()
是一个实例方法,您必须在
timeResponse
上调用它,而不是在返回编译器正在抱怨的函数的类型上调用它

let jsonTransferTime = timeResponse.toReadableString()

请遵守命名约定,即变量名以小写字母开头,不注释编译器可以推断的类型。

请显示
toReadableString
的实现。还要检查是否
让JSONTransferTime:String=TimeInterval.UserDefaults
compiles@AndreasOetjen:把代码贴在原版上了。这就解决了问题。我将在将来遵守命名约定。在正常情况下,我会这样做,但JSON总是用大写字母编写的。