web-dev-qa-db-fra.com

Comment convertir un Int en NSData dans Swift?

Dans Objective-C, j'utilise le code suivant pour

  1. Convertissez une variable Int en NSData, un paquet d'octets.

    int myScore = 0;
    NSData *packet = [NSData dataWithBytes:&myScore length:sizeof(myScore)];
    
  2. Utilisez la variable NSData convertie dans une méthode.

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

J'ai essayé de convertir le code Objective-C en Swift:

var myScore : Int = 0

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

            return true
}

Cependant, je ne suis pas en mesure de convertir une variable Int en NSData et de l'utiliser comme méthode. Comment puis je faire ça?

17
Cesare

Avec Swift 3.x à 5.0:

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

Pour convertir Int en 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)")
}

Pour le reconvertir:

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

Vous pouvez convertir de cette manière:

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