Swift 4.2-类型'(____)->()->(____)'的值没有成员'childNode'

时间:2018-08-05 21:36:01

标签: ios swift xcode sprite-kit

我迅速创建了一个自定义类来管理我正在制作的游戏的主菜单,并将其链接到SKScene文件,并尝试创建一个常量来访问该变量,但出现此错误:无法使用实例成员'属性初始化器中的childNode”。

import SpriteKit
import GameplayKit

class MainMenu: SKScene {

    let startGameButton:SKSpriteNode = self.childNode(withName: "SpriteName")

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    }
}

有人知道发生了什么吗?如果没有,还有另一种访问精灵的方法。

1 个答案:

答案 0 :(得分:2)

let变量的初始值必须是可以在执行init()方法之前进行初始化的常量。反过来,这意味着他们无法引用self

为此,一种解决方法是使它们成为lazy实例变量,这些变量在首次使用时会初始化(根据定义,它们init()在返回对对象的引用之前是不可能发生的) 。在这种情况下,惰性变量将使用闭包的结果进行初始化。

更改:

let startGameButton:SKSpriteNode = self.childNode(withName: "SpriteName")

lazy var startGameButton:SKSpriteNode = self.childNode(withName: "SpriteName") as! SKSpriteNode