2014-10-10 32 views
1

我在製作Game Center遊戲。我發送包含struct MovePacket這樣的數據包:在Swift中從NSData中提取結構

var packet = MovePacket(packetID: 1, move: myMove) 

let dataPacket = NSData(bytes: &packet, length: sizeof(MovePacket)) 

currentMatch!.sendDataToAllPlayers(dataPacket, withDataMode: GKMatchSendDataMode.Reliable, error: nil) 

這就像在Objective-C,但我不知道如何接收NSData解碼回到我struct MovePacket。這是我的嘗試之一:

func match(match: GKMatch!, didReceiveData data: NSData!, fromRemotePlayer player: GKPlayer!) { 

    var packet : MovePacket 

    data.getBytes(&packet, length: sizeof(MovePacket)) // getting error here: Address of variable 'packet' taken before it is initialized 

    println(packet) //Variable 'packet' used before being initialized 

} 
+0

您是否嘗試過'VAR包:MovePacket()'? – 2014-10-10 18:02:10

+0

我沒有看到您的代碼中提到的任何日期。你的意思是說「從** NSData **解碼它」? – 2014-10-10 18:28:25

+0

@robmayoff我的意思是數據不是日期。感謝您的編輯。 – 2014-10-10 19:45:05

回答

4

假設你的意思是「它解碼來自NSData回」:

func match(match: GKMatch!, didReceiveData data: NSData!, fromRemotePlayer player: GKPlayer!) { 
    if data.length == sizeof(MovePacket) { 
     let packet = UnsafePointer<MovePacket>(data.bytes).memory 
     println(packet) 
    } else { 
     // error: data size is incorrect 
    } 
}