在 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
.
我尝试了一些方法,包括使用 Double
和 NSNumber
而不是 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)
}
我正在尝试从 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
.
我尝试了一些方法,包括使用 Double
和 NSNumber
而不是 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)
}