如何将GKPlayer的数据发送到另一个比赛?
我想从一个GKPlayer
NSData
发送到另一个比赛。 因此, sendDataToAllPlayers(_:withDataMode:error:)
将是最理想的。
func sendDataToAllPlayers(data: Int, withDataMode Reliable: GKMatchSendDataMode, error: NSErrorPointer) -> Bool { return true }
但是,如何使用上面的方法发送一个Int
variables?
var score:Int = 0
这个用于将Int
(或其他types)封装到NSData
或从NSData
提取它的版本应该在具有不同字节顺序的设备之间工作:
// at sender before sending data let data = NSMutableData() let archiver = NSKeyedArchiver(forWritingWithMutableData: data) archiver.encodeInteger(score, forKey: "score") archiver.finishEncoding() // at receiver after receiving data let unarchiver = NSKeyedUnarchiver(forReadingWithData: data) let score = unarchiver.decodeIntegerForKey("score") unarchiver.finishDecoding()
extension Int { var data: NSData { var source = self return NSData(bytes: &source, length: sizeof(Int)) } } extension Double { var data: NSData { var source = self return NSData(bytes: &source, length: sizeof(Double)) } } extension NSData { var integerValue:Int { var result = 0 getBytes(&result, length: sizeof(Int)) return result } var doubleValue:Double { var result:Double = 0 getBytes(&result, length: sizeof(Double)) return result } } let myIntegerData = 123.data // _NSInlineData let backToInt = myIntegerData.integerValue // 123 let myDoubleData = 123.456789.data // _NSInlineData let backToDouble = myDoubleData.doubleValue // 123.456789