我实际上是想在Xcode8.1上用Swift3解析一个Json对象。 这是我的代码:
ls
我收到此错误消息:if let objData = objJson["DATA"] as! NSDictionary? {
var msg: String = ""
if let tmp = objData.object(forKey: "Message") {
msg = tmp as! String
} else {
print("NIIILLLLL")
}
}
此行Could not cast value of type 'NSNull' (0x4587b68) to 'NSString' (0x366d5f4)
。
我不明白为什么我收到此错误,因为tmp的类型为msg = tmp as! String
,它应该显示打印而不是转换Any
感谢您的帮助,
答案 0 :(得分:4)
您可以在let
中添加投射。
if let tmp = objData.object(forKey: "Message") as? String {
msg = tmp
}
答案 1 :(得分:1)
使用Swift 3,例如:
fileprivate var rawNull: NSNull = NSNull()
public var object: Any {
get {
return self.rawNull
}
}
您可以将字段对象检查为:
if self.object is NSNull {
// nil
}
答案 2 :(得分:0)
所以要回答为什么会出现该错误的问题,在代码“ tmp”中,它不是NSNull类型的东西(如果您想了解有关NSNull的更多信息,请检查文档),而是基本上是“单例对象”用于表示不允许nil值的集合对象中的null值。” 剩下的就是您是强行铸造,我建议您避免这样做是一种更安全的方式来做您正在做的事情。
guard let objData = objJson["DATA"] as? [String: Any], let msg = objData["Message"] else { return }
// now you can use msg only if exists and also important keeping its unmutable state