Swift 将NSTimeInterval转换为NSData并返回到NSTimeInterval

Swift 将NSTimeInterval转换为NSData并返回到NSTimeInterval,swift,nsdata,nstimeinterval,Swift,Nsdata,Nstimeinterval,如何将NSTimeInterval值转换为NSData?NSTimeInterval只是Double的类型别名。您可以通过复制与其他任何基础类型一样的字节来存档。 var time = NSTimeInterval(100) // 100.0 let timeData = NSData(bytes: &time, length: sizeof(NSTimeInterval)) var unarchivedTime = NSTimeInterval() // You need to i

如何将
NSTimeInterval
值转换为
NSData

NSTimeInterval
只是
Double
的类型别名。您可以通过复制与其他任何基础类型一样的字节来存档。

var time = NSTimeInterval(100) // 100.0

let timeData = NSData(bytes: &time, length: sizeof(NSTimeInterval))

var unarchivedTime = NSTimeInterval() // You need to initialize an empty NSTimeInterval object as a var in order to mutate it

timeData.getBytes(&unarchivedTime, length: sizeof(NSTimeInterval))

print(unarchivedTime) // 100.0
您也可以使用:


Xcode 8.3.1•Swift 3.1

var nowInterval = Date().timeIntervalSince1970                                  // 1491800604.362141
let data = Data(bytes: &nowInterval, count: MemoryLayout<TimeInterval>.size)    // 8 bytes
let timeInterval: Double = data.withUnsafeBytes{ $0.pointee }

let date = Date(timeIntervalSince1970: timeInterval)   // Apr 10, 2017, 2:03 AM"
var nowInterval=Date().timeIntervalSince1970//1491800604.362141
let data=data(字节:&nowInterval,计数:MemoryLayout.size)//8字节
let timeInterval:Double=data.withUnsafeBytes{$0.pointee}
让日期=日期(时间间隔自1970年起:时间间隔)//2017年4月10日凌晨2:03”

为什么需要这样做?在我向对等方发送邀请时向他发送邀请,看看是谁先发送的(多对等连接),我有一个问题,当两个对等方在各自收到对方发送的邀请之前向对方发送邀请时,双方都认为自己是发送方而不是接收方。因此,您希望两台设备的时间设置正确,以便进行比较?发送一个可以轻松存档的NSDate?如何将NSDate转换为NSData?发布了答案使用Xcode 7和Swift 2.0进行测试。如果您使用的是不同版本的Swift,但这不起作用,请告诉我。这不是最佳解决方案,因为
unarchiveObjectWithData
可能引发异常。但因为此方法不会“抛出“它是个例外,没有办法用Swift捕捉到它,这会导致你的应用程序崩溃。这不适用于XCode 7.2等。。。不会接受“&”,然后在删除后,抛出一个关于向未安全指针施放的错误。@DanShev在Xcode 7.2中的Swift iOS操场上为我工作得很好。你能在调用代码的地方发布完整的上下文吗?
var nowInterval = Date().timeIntervalSince1970                                  // 1491800604.362141
let data = Data(bytes: &nowInterval, count: MemoryLayout<TimeInterval>.size)    // 8 bytes
let timeInterval: Double = data.withUnsafeBytes{ $0.pointee }

let date = Date(timeIntervalSince1970: timeInterval)   // Apr 10, 2017, 2:03 AM"