在 Swift Linux 中展开长数据类型

Unwrapping long datatype in Swift Linux

我正在尝试从 MongoDB 获取一条记录,该记录的日期时间为 属性。此 属性 是 ISODate,但通过 Perfect-MongoDB API 作为长数据类型(自 1970 年以来的毫秒数)接收。

代码如下所示:

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.

我尝试了一些方法,包括使用 DoubleNSNumber 而不是 Int64,但它仍然是 nil.

关于如何访问此号码的任何想法?我需要将它转换为可读日期,我这样做的方法是通过 TimeInterval() 需要 1970 年后的秒数的双精度值,因此它需要被 1000 整除并在该步骤中转换为双精度.

编辑:这是 NSNumber 代码,其中 intDate 仍然是 nil,因此不会落入 let date 行。 something 不是零

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]] 

显然在 Swift on 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)
}