如何在不创建新的空实例的情况下获取 class 的实例
How to get instance of class without creating a new empty instance
我有一个 class 叫做 MyClass。 MyClass 正在使用 SceneKit,并且在 sceneDidLoad() 上向我的 sks 添加了一个精灵,附有 class:
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' 对象的 class 这个实例的引用。这将允许我直接调用 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()
}
在我的界面控制器中,我可以找到我的 sprite/class 的正确实例并将其设置为我在 awake
中的全局变量
override func awake(withContext context: Any?) {
if let foundVar = MySceneClass(fileNamed: "MyClass") {
mySprite = foundVar
}
}
在使用找到的 class 的赋值调用 awake() 之后 - 我可以使用正确的控制台日志调用 DoSomething...但是为了创建 [=28 的全局变量,这很烦人=] 我需要用一个空的 MyClass() 初始化它,它又调用 'print("is created!");'
我是 swift 的新手,但似乎必须有更好的方法。如何在不创建它的空实例的情况下在我的界面控制器中创建一个全局变量。我怎样才能直接将它分配给我现有的实例并将其作为我的界面控制器中的全局变量?
我想通了!
var title: String?
https://useyourloaf.com/blog/swift-lazy-property-initialization/
基本上只需要将它声明为一个可选的 var,所以它以 nil 开头...允许我在不初始化它的情况下分配它的类型。
我有一个 class 叫做 MyClass。 MyClass 正在使用 SceneKit,并且在 sceneDidLoad() 上向我的 sks 添加了一个精灵,附有 class:
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' 对象的 class 这个实例的引用。这将允许我直接调用 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()
}
在我的界面控制器中,我可以找到我的 sprite/class 的正确实例并将其设置为我在 awake
中的全局变量override func awake(withContext context: Any?) {
if let foundVar = MySceneClass(fileNamed: "MyClass") {
mySprite = foundVar
}
}
在使用找到的 class 的赋值调用 awake() 之后 - 我可以使用正确的控制台日志调用 DoSomething...但是为了创建 [=28 的全局变量,这很烦人=] 我需要用一个空的 MyClass() 初始化它,它又调用 'print("is created!");'
我是 swift 的新手,但似乎必须有更好的方法。如何在不创建它的空实例的情况下在我的界面控制器中创建一个全局变量。我怎样才能直接将它分配给我现有的实例并将其作为我的界面控制器中的全局变量?
我想通了!
var title: String?
https://useyourloaf.com/blog/swift-lazy-property-initialization/
基本上只需要将它声明为一个可选的 var,所以它以 nil 开头...允许我在不初始化它的情况下分配它的类型。