Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法使用Swift访问NSMutableArray的对象?_Swift_Nsmutablearray - Fatal编程技术网

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

有没有办法使用Swift访问NSMutableArray的对象?,swift,nsmutablearray,Swift,Nsmutablearray,我和我的小组正在写一个太空射击游戏。我们将玩家和危险存储在名为objects的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

我和我的小组正在写一个太空射击游戏。我们将玩家和危险存储在名为objects的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、用户数组并将临时协议传递给类

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 {
    // ...
}

如果您是在swift中编程,那么不要使用NSMUTABLEARRY,而是使用本机数组类型。在这种情况下,不需要自定义协议,使用
Any
insteadAny不够安全,您可以将所有内容放入该数组中,如Bool、String、Structs、UIView等。使用自定义协议来处理阵列中的小访问控制。您可以让任何符合
MyTempProtocol
的内容,如Bool、String等,这样就不会有什么好处,因为您始终需要使用
is
进行检查。更清晰一点是的,但也需要更多的维护。