如何在不创建新的空实例的情况下获取类的实例



我有一个名为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);
}
}

现在在我的接口控制器中,我想获取对"s"对象类的这个实例的引用。这将允许我直接调用 DoSomething 函数,以便更改该特定精灵......

一个问题 - 在我的接口控制器脚本中 - 当我声明我的变量时,它会创建一个新的实例。有没有办法在不创建新实例的情况下声明:

//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()
}

在我的接口控制器中,我可以在 awake 中找到我的精灵/类的正确实例并将其设置为我的全局变量

override func awake(withContext context: Any?) {
if let foundVar = MySceneClass(fileNamed: "MyClass") {
mySprite = foundVar
}
}

在 awake(( 被调用后,分配了找到的类 - 我可以使用正确的控制台日志调用 DoSomething...但令人讨厌的是,为了创建一个"mySprite"的全局变量,我需要用一个空的 MyClass(( 初始化它,而 MyClass(( 反过来调用 'print("is created!"(;'

我是 swift 的新手,但似乎一定有更好的方法。如何在接口控制器中创建全局变量而不创建它的空实例。如何直接将其分配给现有实例,并将其作为接口控制器中的全局变量?

我想通了!

var title: String?

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

基本上只需要将其声明为可选的 var,因此它开始为 nil...允许我在不初始化的情况下分配它的类型。

最新更新