在Swift Linux中展开长数据类型
问题描述:
我试图从具有DateTime属性的MongoDB获取记录。该属性是ISODate,但通过Perfect-MongoDB API作为长数据类型(1970年以来的毫秒)接收。在Swift Linux中展开长数据类型
的代码看起来是这样的:
if var something = dictionary["Something"] as? [String:Any], var intDate = something["$date"] as? Int64
{
let date = Date(timeIntervalSince1970: TimeInterval(intDate/1000))
}
此代码是在Mac OSX上工作的罚款。但是在Linux中,created["$date"] as? Int64
总是nil
。
我试过几件事,包括使用Double
和NSNumber
而不是Int64,但它仍然是nil
。
有关我如何访问此号码的任何想法?我需要将它转换为可读的日期,而我这样做的方式是通过TimeInterval()
,在1970年之后需要秒的Double值,所以它需要被1000整除,并在该步骤中转换为Double。
编辑:这是NSNumber代码,其中intDate
仍然是nil
,因此不通过let date
行。 something
不是nil
if var something = dictionary["Something"] as? [String:Any], var intDate = something["$date"] as? NSNumber
{
let date = Date(timeIntervalSince1970: TimeInterval(NSDecimalNumber(decimal:intDate.decimalValue/1000).doubleValue))
}
编辑2:样品字典这种情况:
var dictionary : [String:Any] = ["SomethingElse":"SomeOtherData","Something":["$date": 1507710414599]]
答
显然有整数类型和斯威夫特在Linux上NSNumber
之间只有有限的转换,所以你要投给确切类型, 这是Int
在这种情况下:
let dictionary : [String: Any] = ["SomethingElse":"SomeOtherData","Something":["$date": 1507710414599]]
if let something = dictionary["Something"] as? [String:Any],
let numDate = something["$date"] as? Int {
let date = Date(timeIntervalSince1970: Double(numDate)/1000)
print("Date:", date)
}
您能不能告诉你试着用的NSNumber?这应该工作。 –
@MartinR在我的编辑中添加了我的代码 – Tyress
试试'as? Int' ... –