Я пытаюсь отправить следующую структуру от одного игрока к другому:Game Center - передача и прием данных с Swift
struct GamePacket {
var action: String
var pointArray: [CGPoint]
}
Я с трудом выяснить правильный способ, чтобы преобразовать GamePacket
в Data
и обратно.
Вот код, который я до сих пор для отправки пакетов:
func send(packet: GamePacket) {
//convert GamePacket to Data here
let data = Data.init()
var remotePlayerArray = [GKPlayer]()
if let currentPlayer = self.currentPlayer, let match = self.match, let playerArray = self.match?.players {
for player in playerArray {
if player != currentPlayer {
remotePlayerArray.append(player)
}
}
do {
try match.send(data, to: remotePlayerArray, dataMode: GKMatchSendDataMode.reliable)
}
catch {
print("connectionError")
}
}
}
И код для получающих:
func match(_ match: GKMatch, didReceive data: Data, fromRemotePlayer player: GKPlayer) {
//convert Data to GamePacket here
}
Из некоторых образцов, написанных в ObjectiveC
, мне удалось конвертировать GamePacket
в Data
, используя что-то похожее на следующее:
let data = NSData(bytes: &packet, length: MemoryLayout<GamePacket>.size) as Data
Однако, я не могу понять, как преобразовать Data
обратно в GamePacket
на приемном конце, и я не уверен, что это правильный способ сделать это.
Любая помощь в значительной степени оценивается. Спасибо.