Есть ли способ получить доступ к объекту NSMutableArray с помощью Swift? - PullRequest
0 голосов
/ 14 февраля 2020

Моя группа и я пишем космический шутер. Мы храним игрока и опасности в 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));

1 Ответ

0 голосов
/ 14 февраля 2020

Не используйте 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 {
    // ...
}
...