<String> Int64 可选为 nil,硬编码它有效



我有一个函数:

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的代码不是我写的,为什么我没有注意到这一点。

最新更新