Xcode 不在函数错误中时的实例帧类型

Xcode 不在函数错误中时的实例帧类型,xcode,swift,sprite-kit,Xcode,Swift,Sprite Kit,我正在制作一个游戏,其中对象在地图上某个位置生成,我有多个用于不同对象的函数,需要一个引用,因此我将代码放在函数之外以扩大其范围,但现在我得到一个错误,即 Instance type 'frame' cannot be used on type 'Levelunit' 如果我把它放回函数中,它是完全好的,但是当我把它放回函数外时,它似乎有问题。这是我的密码: let yAxisSpawnLocations: [CGFloat] = [0] let xAxisSpawnLocations: [C

我正在制作一个游戏,其中对象在地图上某个位置生成,我有多个用于不同对象的函数,需要一个引用,因此我将代码放在函数之外以扩大其范围,但现在我得到一个错误,即

Instance type 'frame' cannot be used on type 'Levelunit'
如果我把它放回函数中,它是完全好的,但是当我把它放回函数外时,它似乎有问题。这是我的密码:

let yAxisSpawnLocations: [CGFloat] = [0]
let xAxisSpawnLocations: [CGFloat] = {

    var spawnLocations:[CGFloat] = []   //Create 5 possible spawn locations
    let numberOfNodes = 5

    for i in 0...numberOfNodes - 1 {

        var xPosition = (frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)

        xPosition += thePlayer.size.width/2

        xPosition -= frame.maxX/1.6
        spawnLocations.append( xPosition )

    }

    return spawnLocations

}()
我查了一下,不太明白给出的答案。有人能告诉我我做错了什么吗


顺便说一句,LevelUnit是我的类的名称。

LevelUnit
完全初始化之前,您正在尝试使用
self
。例如,这是一个隐式使用
self
的地方:

var xPosition = (frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)
这与:

var xPosition = (self.frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)
因此,您可以在
Levelunit
初始值设定项处初始化此属性(如果您不想与自动初始值设定项继承规则发生冲突,我将跳过此操作),或者在
didMoveToView
中初始化它,这将很好地工作。如果我没有错的话,
Levelunit
可能是SKScene的子类,对吗?如果是这样,就这样做:

//Define a property of Levelunit like this

 var xAxisSpawnLocations:[CGFloat] = []
然后在
didMoveToView
中初始化它:

let numberOfNodes = 5

for i in 0...numberOfNodes - 1 {

    var xPosition = (self.frame.maxX) / CGFloat((numberOfNodes - 1)) * CGFloat(i)

    xPosition += thePlayer.size.width/2
    xPosition -= frame.maxX/1.6
    xAxisSpawnLocations.append( xPosition )

}

如果您提供有关Levelunit类的更多信息,我可以对重写其初始值设定项并在此处初始化
xSpawningLocation
属性是否是一个好主意进行更多评论。我猜这是一个
SKScene
的子类,您可以使用名为便利初始化器的文件初始化它,对吗?但无论如何,看看我的答案。我想知道你是否能帮我解决这个问题?