web-dev-qa-db-ja.com

SwiftでIntをNSDataに変換する方法は?

Objective-Cでは、次のコードを使用して

  1. Int変数をバイトのパケットであるNSDataに変換します。

    int myScore = 0;
    NSData *packet = [NSData dataWithBytes:&myScore length:sizeof(myScore)];
    
  2. 変換されたNSData変数をメソッドに使用します。

    [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変数をNSDataに変換してメソッドとして使用することはできません。どうやってやるの?

17
Cesare

Swift 3.x to 5.0:

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

IntNSDataに変換するには:

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))
}
24
Rob

この方法で変換できます:

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