AVAudioPlayer()预期的声明错误

时间:2018-05-23 16:23:54

标签: swift audio avfoundation avaudioplayer

我正在尝试为我的游戏添加背景音乐。我正在使用AVAudioPlayer(),但我得到的是#34;预期声明"错误。为什么我会收到此错误,如何解决?我查了一下,但它非常广泛,我无法找到确切的问题。我希望我的代码的上下文会有所帮助:

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()
    }

1 个答案:

答案 0 :(得分:3)

您需要将这两行结合起来:

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

分成一行:

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

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

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

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

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

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

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

此外,Swift中的标准是命名以大写字母开头的类,结构和枚举。变量,函数,案例等都应以小写字母开头。

还要避开Swift中的NSURL。使用URL