如何检查字段类型是否为Any?是没有NSNull

时间:2016-11-18 23:11:07

标签: swift swift3

我实际上是想在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

感谢您的帮助,

3 个答案:

答案 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