我注意到在查看字典中的值是否为零时,我发现一种令人困惑的行为。在某个通知的通知处理程序中,我想检查错误键的值是否为nil。在尝试调试时,我尝试了以下内容:
po userInfo ["错误"]
▿可选 - 有些:没有了
(lldb)po userInfo [" error"] == nil
假
鉴于第一个命令的输出,我预计第二个命令将返回true。有什么想法吗?
由于
答案 0 :(得分:2)
userInfo["error"]
正在回馈Optional<Sometype>.some(Optional<SomeOtherType>.none)
。因此,userInfo
词典 具有键"error"
的值,但该值是另一个可选的,其本身为nil
。
这是一个模仿结构的代码片段:
let userInfo: [String: String?] = [
"something": "something else",
"another thing": "yet another thing",
"error": nil
]
print(userInfo["error"] as Any) // Optional(nil)
答案 1 :(得分:0)
你知道Any可以包含任何内容,对吗?它还可以包含一个可选项。它可以包含一个nil的可选项。
看起来这就是这里发生的事情。 userInfo [“error”]不是nil,它包含一个值为nil的可选项。那不是一回事。我会检查你是如何创建userInfo的。
答案 2 :(得分:0)
我想我找到了罪魁祸首。我正在创建字典如下:
let userInfo = [DatabaseRestaurantNotificationPayload.infoDictionaryErrorKey:nil, DatabaseRestaurantNotificationPayload.infoDictionaryRestaurantKey:value1] as [String : Any]
并且与人们可能期望的不同,这最终实际上为错误键添加了一个可选项,因此查询字典以获取errorKey会返回Optional(nil)而不是nil本身。