我有此功能,可在其中检索某些功能期间发送的一些数据:
@available(iOS 9.0, *)
func match(_ match: GKMatch, didReceive data: Data, forRecipient recipient: GKPlayer, fromRemotePlayer player: GKPlayer) {
print("RECEIVED DATA 9.0")
receiveData(turnLog: data, player: player)
receiveDataAction(movment: data, player: player)
receiveDataActionTop(movmentTop: data, player: player)
}
但是很明显,我调用的每个函数都与特定数据有关。我如何知道创建if-else语句时收到的数据“类型”?
我这样发送数据:
let encoder = JSONEncoder()
let dataMovment = try! encoder.encode(SKActionDescriptor(x: 450, duration: 0.25, x2: 1050, duration2: 0.5))
try match?.sendData(toAllPlayers: dataMovment, with: GKMatchSendDataMode.reliable)
答案 0 :(得分:0)
这完全取决于您要发送的数据类型。由您决定是否要建立一个系统,让接收器可以确定正在处理的数据。
通常,有两种方法。
任何一个模式(数据的“布局”)都作为数据的一部分进行通信。例如JSON,其中[ ]
/ { }
传达字段的结构。当您获取大量JSON时,您不知道数组中的第一个对象持续了多长时间。它从{
开始,一直持续到匹配的}
。 JSON本身会编码其自身布局的描述。
该模式是协议定义的,不会传输。正确实现该协议的接收器将期望进入其中的数据与协议中定义的约束相匹配。例如,UDP数据包只是“原始”数据,其数据包不传输,而是由协议定义的:
该结构信息都不是由数据包自描述的。相反,它是由UDP协议定义的,任何“播放得很好”的发送者/接收者都应该遵循该模式。