发送两个字符串和整数数组作为 matchData

Send two Arrays of Strings and Ints as matchData

我正在使用 Game Center 开发一款回合制游戏。我想发送一个字符串数组和一个整数数组作为 matchData。我知道如何创建两者,但我只知道如何发送其中一个...

这就是我创建字符串数组的方式:

var strings = [String]()  
let data = NSKeyedArchiver.archivedDataWithRootObject(strings)

这就是我创建 Int 数组的方式:

var array : [Int] = []  
let data = NSData(bytes: array, length: array.count * sizeof(Int))

这就是我发送我创建的数据的方式

currentMatch?.endTurnWithNextParticipants([nextParticipant], turnTimeout: 20, matchData: data, completionHandler: { (error) in
                if error != nil {
                    print(error)

                } else {
                    //Data sent

                    }
                }
            })

使用 GKTurnBasedMatch.loadMatchDataWithCompletionHandler: 获取匹配数据,然后使用该匹配数据(如果它存在于完成块中)。

最简单的方法可能是将两者都包装在字典中,然后序列化字典:

let data = NSKeyedArchiver.archivedDataWithRootObject([
    "strings":strings,
    "numbers":array
])

那么要恢复原始数据,可以使用:

guard let recovered = NSKeyedUnarchiver.unarchiveObjectWithData(data) as? [String:AnyObject],
    let strings = recovered["strings"] as? [String],
    let array = recovered["numbers"] as? [Int] else {
        // recovery failed... deal with it
}