2016-09-07 40 views
0

我想这个Objective-C代码转换为迅速,但似乎无法推测出来:NSMutableArray。 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; 
    } 
}; 

这就是我想我会是这样,但我我一点都不确定,所以我会很感激在这里的帮助。

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]) 

    } 
} 

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

Errors

我用这个转换器:objectivec2swift.com,因为我有一个Objective-C的

+0

基本上在Swift中没有以下划线开头的隐式支持实例变量。删除两个主要的下划线。 'uint32_t'是'UInt32' – vadian

回答

-1

没有经验,尝试使用此代码

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) 
} 
} 

我会推荐tha如果在前面的代码中为玩家创建了一个单独的类,那么该变量就是AnyObject的一个数组类型,并且正在追加一个tipple,所以编译器正在抱怨。因此,创建一个单独的播放器类并设置其属性,然后将其附加到您的数组,并且您的代码应该运行良好。我还从init删除了override关键字,因为此类没有超类。

+1

由于你不是从任何东西继承,你不应该能够调用'super.init()' – HAS

+0

它给了我一个错误'orderOfPlayer.append([play ...' 。错误是'上下文类型'anyObject'不能与字典文字' – Benja0906

0
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。我也猜测,以下划线开头的变量应该是该类的私有实例变量,所以我在这里将其作为private。我没有初始化init中的所有内容,而是使用了Swift来赋予所有属性初始值。

0
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]) 

        } 
}