У меня есть класс MyClass. MyClass использует SceneKit и на sceneDidLoad () добавляет спрайт в мои sks со следующим классом:
class MyClass: SKScene{
var s = SKSpriteNode(imageNamed: "myImage.png");
override func sceneDidLoad() {
s.name = "TheNamedInstanceWithMySprite"
s.size = CGSize(width: 10, height: 10);
self.addChild(s)
print("is created!");
}
func DoSomething(){
print(s.name);
}
}
Теперь в моем контроллере интерфейса я хочу получить ссылку на этот экземпляр класса ' С 'объект. Это позволит мне вызывать функцию DoSomething напрямую для изменения этого указанного c спрайта ...
Проблема - в моем скрипте контроллера интерфейса - когда я объявляю свою переменную, она создает новый экземпляр этой переменной. Есть ли способ объявить без создания нового экземпляра:
//problem - creates a new empty instance of the class on declaration
var mySprite = MyClass()
@IBOutlet weak var spriteTapGestures: WKTapGestureRecognizer!
@IBAction func onSpriteTap(_ sender: Any) {
mySprite.DoSomething()
}
В моем контроллере интерфейса я могу найти и установить правильный экземпляр моего спрайта / класса для моей глобальной переменной в активном состоянии
override func awake(withContext context: Any?) {
if let foundVar = MySceneClass(fileNamed: "MyClass") {
mySprite = foundVar
}
}
После вызова awake () с назначением найденного класса - я могу вызывать DoSomething с правильным журналом консоли ... Но раздражает, что для создания глобальной переменной 'mySprite' мне нужно ее инициализировать с пустым MyClass (), который, в свою очередь, вызывает 'print ("создан!");'
Я новичок в swift, но, похоже, должен быть лучший способ. Как я могу создать глобальную переменную в моем контроллере интерфейса, не создавая пустой экземпляр этого. Как я могу go напрямую и назначить его для моего существующего экземпляра и использовать его как глобальную переменную в моем контроллере интерфейса?