How to convert an Int into NSData in Swift?

2019-04-04 02:43发布

问题:

In Objective-C I use the following code to

  1. Convert an Int variable into NSData, a packet of bytes.

    int myScore = 0;
    NSData *packet = [NSData dataWithBytes:&myScore length:sizeof(myScore)];
    
  2. Use the converted NSData variable into a method.

    [match sendDataToAllPlayers: 
    packet withDataMode: GKMatchSendDataUnreliable 
    error: &error];
    

I tried converting the Objective-C code into Swift:

var myScore : Int = 0

func sendDataToAllPlayers(packet: Int!,
            withDataMode mode: GKMatchSendDataMode,
            error: NSErrorPointer) -> Bool {

            return true
}

However, I am not able to convert an Int variable into an NSData and use it an a method. How can I do that?

回答1:

With Swift 3.x and 4.0:

var myInt = 77
var myIntData = Data(bytes: &myInt, 
                     count: MemoryLayout.size(ofValue: myInt))


回答2:

To convert Int to 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)")
}

To convert it back:

func match(match: GKMatch!, didReceiveData data: NSData!, fromPlayer playerID: String!) {
    var score: Int = 0
    data.getBytes(&score, length: sizeof(Int))
}


回答3:

You can convert in this way:

var myScore: NSInteger = 0
let data = NSData(bytes: &myScore, length: sizeof(NSInteger))