Swift2 根据xcode 7 swift 2中的教程构建项目,遇到未解析的标识符

Swift2 根据xcode 7 swift 2中的教程构建项目,遇到未解析的标识符,swift2,xcode7,Swift2,Xcode7,我正在学习用Swift 2编写的针对Xcode 7的教程,其中第1部分(您可以导航到第四部分,我的问题出现在这里): 我正在使用我自己的精灵来代替教程中的精灵。当我运行代码时,在下面的第一行出现一个错误 let spawnRandomHead = SKAction.runBlock(spawnHead) let waitTime = SKAction.waitForDuration(1.0) let sequence = SKAction.sequence([spawnR

我正在学习用Swift 2编写的针对Xcode 7的教程,其中第1部分(您可以导航到第四部分,我的问题出现在这里): 我正在使用我自己的精灵来代替教程中的精灵。当我运行代码时,在下面的第一行出现一个错误

    let spawnRandomHead = SKAction.runBlock(spawnHead)
    let waitTime = SKAction.waitForDuration(1.0)
    let sequence = SKAction.sequence([spawnRandomHead,waitTime])
    runAction(SKAction.repeatActionForever(sequence))
完整代码如下:

    import SpriteKit

class GameScene: SKScene, SKPhysicsContactDelegate {

enum bitMask: UInt32 {
    case defender = 1
    case head = 2
    case frame = 4
}


let defender = SKSpriteNode(imageNamed: "Ivanovic is a boss")



override func didMoveToView(view: SKView) {
    /* Setup your scene here */
    backgroundColor = UIColor.blueColor()
    defender.position = CGPoint(x: frame.size.width / 2, y:frame.size.height / 2)
    defender.physicsBody = SKPhysicsBody(texture: defender.texture!, size: defender.frame.size)
    defender.physicsBody?.dynamic = false
    defender.physicsBody?.affectedByGravity = false
    defender.physicsBody?.allowsRotation = false
    defender.physicsBody?.categoryBitMask = bitMask.head.rawValue
    defender.physicsBody?.contactTestBitMask = bitMask.head.rawValue
    defender.physicsBody?.collisionBitMask = 0
    addChild(defender)

    let spawnRandomHead = SKAction.runBlock(spawnHead)
    let waitTime = SKAction.waitForDuration(1.0)
    let sequence = SKAction.sequence([spawnRandomHead,waitTime])
    runAction(SKAction.repeatActionForever(sequence))

    physicsWorld.contactDelegate = self
    physicsWorld.gravity = CGVectorMake(0.0, -0.9)

    defender.physicsBody?.contactTestBitMask = bitMask.frame.rawValue
    defender.physicsBody?.collisionBitMask = bitMask.frame.rawValue

       }

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    let touch = touches.first! as UITouch
    let touchLocation = touch.locationInNode(self)
    //print(touchLocation)

    let moveTo = SKAction.moveTo(touchLocation, duration: 1.0)
    defender.runAction(moveTo)


    func randomNumber(min min: CGFloat, max: CGFloat) -> CGFloat {
        let random = CGFloat(Float(arc4random()) / 0xFFFFFFFF)
        return random * (max - min) + min
    }

    func spawnHead() {

        let head = SKSpriteNode(imageNamed: "The Biter Strikes")
        head.position = CGPoint(x: frame.size.width * randomNumber(min: 0, max: 1), y: frame.size.height + head.size.height)
        head.physicsBody = SKPhysicsBody(texture: head.texture!, size: head.frame.size)
        head.physicsBody?.categoryBitMask = bitMask.head.rawValue
        head.physicsBody?.contactTestBitMask = bitMask.defender.rawValue
        addChild(head)


    }
    func didBeginContact(contact: SKPhysicsContact) {
        let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask

        switch(contactMask) {
        case bitMask.defender.rawValue | bitMask.head.rawValue:
            let secondNode = contact.bodyB.node
            secondNode?.physicsBody?.allowsRotation = true
            let firstNode = contact.bodyA.node
            firstNode?.physicsBody?.allowsRotation = true
            firstNode?.removeFromParent()

        default:
            return
        }


    }


}
}

一个新的错误弹出,说“类型'GameSecene'的值没有成员'spawnHead'。

运行块要求闭包作为参数,因此替换

let spawnRandomHead = SKAction.runBlock(spawnHead)

或者干脆

let spawnRandomHead = SKAction.runBlock { [unowned self] in
    self.spawnHead()
}
let spawnRandomHead = SKAction.runBlock({ [unowned self] () -> Void in
    self.spawnHead()
})
let spawnRandomHead = SKAction.runBlock { [unowned self] in
    self.spawnHead()
}