2016-09-07 44 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]) 

        } 
}