Int64的可选<string>为nil,对其进行硬编码

时间:2019-02-05 09:50:32

标签: ios swift

我有一个功能:

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

这是怎么回事?硬编码值与实际变量有何不同?

谢谢。

1 个答案:

答案 0 :(得分:0)

问题在于以下内容已保存到UserDefaults中:String(describing: self._userId),当然将实际的单词'Optional(...')与它一起另存为String。

我认为调试器向我显示了一个值为350350002的Optional而不是一个实际的字符串:“ Optional(350350002)” +我没有编写保存到UserDefaults代码,为什么我没有注意到这一点。

相关问题