有没有办法使用 Swift 访问 NSMutableArray 的对象?



我和我的小组正在写一个太空射击游戏。我们将玩家和危险存储在称为对象的 NSMutableArray 中。我刚刚编写了一个使用倾斜控件控制玩家移动的函数,但要测试它,我需要在调用函数时传入播放器,并且我似乎无法从对象数组访问播放器。这是我的代码:

public var objects: NSMutableArray!
objects.add(Player(pos: GLKVector3(v: (0.0, 0.0, -5.0)), up: GLKVector3(v: (0.0, 1.0, 0.0)), forw: GLKVector3(v: (0.0, 0.0, -1.0)), hp: 5, dmg: 1));
objects.add(Satellite(pos: GLKVector3(v: (2.0, -2.0, -40.0)), up: GLKVector3(v: (0.0, 1.0, 0.0)), forw: GLKVector3(v: (0.0, 0.0, -1.0)), hp: 5, dmg: 1, spd: 2.0));
objects.add(Satellite(pos: GLKVector3(v: (-2.0, 2.0, -50.0)), up: GLKVector3(v: (0.0, 1.0, 0.0)), forw: GLKVector3(v: (0.0, 0.0, 1.0)), hp: 1, dmg: 1, spd: 2.0));
myDeviceMotion(objects.object(at: 0));

不使用 NSMutableArray、user Arrays 并将临时协议传递给您的类。

protocol MyTempProtocol {  }
class Player: MyTempProtocol {
// ...
}
class Satellite: MyTempProtocol {
// ...
}
/// --------------
let player1 = Player()
let player2 = Player()
let satellite1 = Satellite()
let satellite2 = Satellite()
var objects = [MyTempProtocol]()
objects.append(player1)
objects.append(satellite1)
objects.append(satellite2)
objects.append(player2)

if let objectIsPlayer = objects[0] is Player {
// ...
} else if let objectIsSatellite = objects[0] is Satellite {
// ... 
} else {
// ...
}

最新更新