Objective c NSMutableArray。目标c到swift代码

Objective c NSMutableArray。目标c到swift代码,objective-c,swift,converter,Objective C,Swift,Converter,我试图将Objective-C代码转换为swift,但似乎无法理解: @implementation MultiplayerNetworking { uint32_t _ourRandomNumber; GameState _gameState; BOOL _isPlayer1, _receivedAllRandomNumbers; NSMutableArray *_orderOfPlayers; #define playerIdKey @"Pla

我试图将Objective-C代码转换为swift,但似乎无法理解:

@implementation MultiplayerNetworking {
    uint32_t _ourRandomNumber;
    GameState _gameState;
    BOOL _isPlayer1, _receivedAllRandomNumbers;

    NSMutableArray *_orderOfPlayers;



    #define playerIdKey @"PlayerId"
    #define randomNumberKey @"randomNumber"

    - (id)init
    {
        if (self = [super init]) {
            _ourRandomNumber = arc4random();
            _gameState = kGameStateWaitingForMatch;
            _orderOfPlayers = [NSMutableArray array];
            [_orderOfPlayers addObject:@{playerIdKey : [GKLocalPlayer localPlayer].playerID, randomNumberKey : @(_ourRandomNumber)}];
        }
        return self;
    }
};  
这就是我想我会成为的,但我一点也不确定,所以我非常感谢som的帮助

class MultiplayerNetworking {

    var _ourRandomNumber = uint32_t()
    var _gameState = GameState()
    var isPlayer1 = false
    var receivedAllRandomNumbers = false
    var orderOfPlayers = [AnyObject]()

    let playerIdKey = "PlayerId"
    let randomNumberKey = "randomNumber"

    override init() {
        super.init()

        self.ourRandomNumber = arc4random()
        self.gameState = kGameStateWaitingForMatch
        self.orderOfPlayers = [AnyObject]()
        orderOfPlayers.append([playerIdKey: GKLocalPlayer.localPlayer().playerID, randomNumberKey: ourRandomNumber])

    }
}
但它给了我一些错误,很多:

我使用了这个转换器:因为我没有使用Objective-C的经验

class Player{
   var playerIdKey : String?
   var randomNumberKey : UInt32?
}

class MultiplayerNetworking {

var ourRandomNumber = UInt32()
var gameState = GameState()
var isPlayer1 = false
var receivedAllRandomNumbers = false
var orderOfPlayers = [Player]()

let playerIdKey = "PlayerId"
let randomNumberKey = "randomNumber"

override init() {
    self.ourRandomNumber = arc4random()
    self.gameState = kGameStateWaitingForMatch
    let player = Player()
    player.playerIdKey = GKLocalPlayer.localPlayer().playerID
    player.randomNumberKey = ourRandomNumber
    orderOfPlayers.append(player)
}
}
我建议您在前面的代码中为player创建一个单独的类。该变量是AnyObject的数组类型,并且向其添加了一个tipple,因此编译器会抱怨。因此,创建一个单独的player类并设置其属性,然后将其附加到数组中,您的代码应该可以正常运行

enum GameState {
    case waitingForMatch
}

class MultiplayerNetworking {

    var isPlayer1 = false
    var receivedAllRandomNumbers = false
    var orderOfPlayers = [AnyObject]()

    private let playerIdKey = "PlayerId"
    private let randomNumberKey = "randomNumber"
    private var ourRandomNumber = arc4random()
    private var gameState = GameState.waitingForMatch


    init() {
        orderOfPlayers.append([playerIdKey: GKLocalPlayer.localPlayer.playerID, randomNumberKey: ourRandomNumber] as AnyObject)
    }

}

我假设
GameState
是一个枚举,并且只使用我从代码中看到的一个案例创建了
enum
。我还猜测以下划线开头的变量应该是该类的私有实例变量,因此我在这里将它们设置为私有的。我没有在
init
中初始化所有内容,而是使用Swift为所有属性提供初始值。

基本上在Swift中没有以下划线开头的隐式支持实例变量。删除两个前导下划线。而且
uint32\u t
uint32
,因为您没有继承任何您不应该能够调用的
super.init()
的内容,所以它在
orderOfPlayer.append([play…
)处给我一个错误。错误是“上下文类型”anyObject不能与字典文本一起使用”
class MultiplayerNetworking {

        var _ourRandomNumber = [__uint32_t]()
        var _gameState = GameState()
        var isPlayer1 = false
        var receivedAllRandomNumbers = false
        var orderOfPlayers = [AnyObject]()
        let playerIdKey = "PlayerId"
        let randomNumberKey = "randomNumber"

                 init() {

                            self.ourRandomNumber = arc4random()
                            self.gameState = kGameStateWaitingForMatch
                            self.orderOfPlayers = [AnyObject]()
                            orderOfPlayers.append([playerIdKey: GKLocalPlayer.localPlayer().playerID, randomNumberKey: ourRandomNumber])

                  }
}