我有一个功能:
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
这是怎么回事?硬编码值与实际变量有何不同?
谢谢。
答案 0 :(得分:0)
问题在于以下内容已保存到UserDefaults中:String(describing: self._userId)
,当然将实际的单词'Optional(...')与它一起另存为String。
我认为调试器向我显示了一个值为350350002的Optional而不是一个实际的字符串:“ Optional(350350002)” +我没有编写保存到UserDefaults代码,为什么我没有注意到这一点。