Swift 可选的 nil 检查返回与实际情况不同的结果

标签 swift

taker 是一个字典。当我检查 taker["user_id"] 的 nil 值时。它说它不是零。但是当我打开它时,它实际上包含空值。这是我的调试器输出。这怎么可能?

Debugger output

最佳答案

po taker["user_id"]给你正确答案:Some: <null>意味着可空值内部的内容为空。即使没有 Foundation 互操作,您也可以通过可选值字典获得类似的东西(比如 [Int: Int?] ,在这种情况下,下标的结果类型将为 Int?? )。

不过,在您的情况下,可选对象中的对象“只是”是 NSNull() 的一个实例。 . NSNull是您在 nil 的地方使用的特殊类型是 Not Acceptable 。例如,Objective-C NSDictionaries 不支持 nil值(因为它们为字典中不存在的键返回 nil)。如果你想发出 NSDictionary 的信号key 存在但没有值,最常见的做法是将其关联到 NSNull值(value)。

我怀疑taker是从 JSON 派生的字典。您应该检查,除了存在的键之外,该值是否具有您期望的类型。这将淘汰NSNull s 和其他可能的不正确输入。例如:

if let value = taker["user_id"] as? Int {
    // things here
}

关于Swift 可选的 nil 检查返回与实际情况不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38495508/

相关文章:

ios - UITableviewCell 中的渐变添加导致重新加载时出现动画问题

swift - 如何移动到 SwiftUI 中的下一个 TextField?

ios - 将依赖项添加到 subview Controller

ios - 当用户离开并返回应用程序时如何防止动画完成

ios - Swift UIActivityViewController 图像共享不起作用

ios - 两个独立的 UIViewControllers 上的 UITabBarControllerDelegate - Swift

ios - Youtube API v3 search.list 返回不相关的视频 Swift

ios - 如何在带有图像的 SwiftUI 中使用 Bundle

ios - 安全区域与 iOS9/10/11 兼容 - 以编程方式

ios - 更新 pod 后使用未声明的类型 'GraphRequestResult'