【发布时间】:2017-06-28 15:48:40
【问题描述】:
if let action = self.info?["action"] {
switch action as! String {
....
}
} else {...}
在此示例中,“action”始终作为 key 在 self.info 中存在。
一旦第二行执行,我得到:
Could not cast value of type 'NSNull' (0x1b7f59128) to 'NSString' (0x1b7f8ae8).
知道即使我打开了 action 怎么可能是 NSNull 吗?我什至尝试过“if action != nil”,但它仍然以某种方式溜过并导致 SIGABRT。
【问题讨论】:
-
您尝试解包的可能不是字符串
-
self.info 是 [String : AnyObject] 类型的字典,但值始终是字符串。无论如何都不应该强迫沮丧的工作?
-
为什么在声明字符串时不将操作有条件地强制转换为字符串?像这样:
if let action = self.info?["action"] as? String {... -
不确定您使用的是哪个版本的 Swift,但从 Swift 3 开始,
String不符合AnyObject。请改用[String:Any]。 -
另外从错误消息中你可以看到你得到的是
NSNull而不是一个字符串,并且检查nil不会有帮助,因为NSNull是一个实际的对象。