如何将Int转换成Swift中的NSData?
在Objective-C中,我使用下面的代码来
-
将一个
Int
variables转换为一个字节的数据包NSData
。int myScore = 0; NSData *packet = [NSData dataWithBytes:&myScore length:sizeof(myScore)];
-
使用转换的
NSData
variables到一个方法。[match sendDataToAllPlayers: packet withDataMode: GKMatchSendDataUnreliable error: &error];
我试图将Objective-C代码转换成Swift:
var myScore : Int = 0 func sendDataToAllPlayers(packet: Int!, withDataMode mode: GKMatchSendDataMode, error: NSErrorPointer) -> Bool { return true }
但是,我不能将一个Int
variables转换成一个NSData
并使用它的方法。 我怎样才能做到这一点?
将Int
转换为NSData
:
var score: Int = 1000 let data = NSData(bytes: &score, length: sizeof(Int)) var error: NSError? if !match.sendDataToAllPlayers(data, withDataMode: .Unreliable, error: &error) { println("error sending data: \(error)") }
将其转换回来:
func match(match: GKMatch!, didReceiveData data: NSData!, fromPlayer playerID: String!) { var score: Int = 0 data.getBytes(&score, length: sizeof(Int)) }
随着Swift 3.x和4.0:
var myInt = 77 var myIntData = Data(bytes: &myInt, count: MemoryLayout.size(ofValue: myInt))
你可以这样转换:
var myScore: NSInteger = 0 let data = NSData(bytes: &myScore, length: sizeof(NSInteger))