AVAudioPlayer() 预期声明错误

AVAudioPlayer() Expected declaration error

我正在尝试为我的游戏添加背景音乐。我正在使用 AVAudioPlayer() 但出现 "Expected declaration" 错误。为什么会出现此错误,我该如何解决?我查了一下,但范围很广,我找不到我的确切问题。我希望我的代码上下文对您有所帮助:

import SpriteKit
import GameplayKit
import AVFoundation
import UIKit

class GameScene: SKScene {
    private var label : SKLabelNode?
    private var spinnyNode : SKShapeNode?

    var ButtonAudioURL = NSURL(fileURLWithPath: Bundle.main.path(forResource: "HomeSoundtrack", ofType: "m4a")!)
    var ButtonAudioPlayer = AVAudioPlayer()
    ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

    var gameArea: CGRect?

    enum gameState {
        case preGame
        case inGame
        case endGame
    }

    var currentGameState = gameState.preGame

    override init(size:CGSize) {
        let maxAspectRatio: CGFloat = 16.0/9.0
        let playableWidth = size.height / maxAspectRatio
        let margin = (size.width - playableWidth) / 2
        gameArea = CGRect(x: margin, y:0, width: playableWidth, height: size.height)

        super.init(size: size)
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    override func didMove(to view: SKView) {
        ButtonAudioPlayer.play()
    }

你需要合并这两行:

var ButtonAudioPlayer = AVAudioPlayer()
ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

成一行:

var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

但这仍然行不通,因为您不能拥有两个 class 属性,其中一个属性依赖于另一个。

所以现在您需要将该行更改为:

lazy var ButtonAudioPlayer = AVAudioPlayer(contentsOfURL: ButtonAudioURL, error: nil)

但是Swift中AVAudioPlayer没有这样的初始化器。你需要它是:

lazy var ButtonAudioPlayer = try! AVAudioPlayer(contentsOfURL: ButtonAudioURL)

请注意,如果 URL 未引用有效的音频文件,这将在运行时崩溃。

此外,在 Swift 中以大写字母开头命名 classes、结构和枚举是标准的。变量、函数、case等全部以小写字母开头。

同时避免在 Swift 中使用 NSURL。使用 URL.