Как получить экземпляр класса, не создавая новый пустой экземпляр - PullRequest
0 голосов
/ 19 января 2020

У меня есть класс 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 напрямую и назначить его для моего существующего экземпляра и использовать его как глобальную переменную в моем контроллере интерфейса?

1 Ответ

0 голосов
/ 20 января 2020

Я понял это!

var title: String?

https://useyourloaf.com/blog/swift-lazy-property-initialization/

в основном просто нужно объявить его как необязательный var, чтобы он начинался как nil .. . позволяет мне назначить его тип без инициализации.

...