我有一个函数:
func setId(id: Int64?) {
self._id = id
}
此函数在此处调用:
let defaults = UserDefaults.standard
let id = defaults.object(forKey: "userId") as? String
if (id != nil) {
setId(id: Int64(id!))
}
在函数setId()
中,id
的值似乎总是零。当调试并在堆栈中逐步调用时,对于调用方(第二段代码),id
的值为
po id
:
Optional<String>
- some : "Optional(350350002)"
当我将其检查为Int64
:时
po Int64(id!)
:nil
当我用硬编码值检查时:
po Int64(Optional("350350002")!)
:
Optional<Int64>
- some : 350350002
也称为po Int64((id as NSString))
:nil
这是怎么回事?硬编码值与实际变量有何不同?
谢谢。
问题是以下内容被保存到UserDefaults:String(describing: self._userId)
,当然,将实际单词"Optional(…"保存为String.
我以为调试器显示的是一个值为350350002的Optional,而不是一个实际字符串:"Optional(350350002)"+保存到UserDefaults的代码不是我写的,为什么我没有注意到这一点。