Objective c NSMutableArray。目标c到swift代码
我试图将Objective-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
@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])
}
}