Aquí está el código que causa el error:

import UIKit
import AVFoundation

class ViewController: UIViewController {
    var BackgroundAudio = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: Bundle.mainBundle.pathForResources( "Music", ofType: "mp3")!),error: nil)
}

Editar: estoy creando un juego de piedra, papel y tijera con audio, aquí está mi código:

import UIKit
import AVFoundation

class ViewController: UIViewController {
    let backgroundAudio : AVAudioPlayer = {let url = Bundle.main.url(forResource: "Music", withExtension: "mp3")!
        return try! AVAudioPlayer(contentsOf: url)

    }()
    let controller = ViewController()
    controller.backgroundAudio.play()
        @IBOutlet weak var cpuImage: UIImageView!
    @IBOutlet weak var playerImage: UIImageView!
    @IBOutlet weak var cpuScore: UILabel!
    @IBOutlet weak var playerScore: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func rockButtonPressed(_ sender: Any) {
        playerMove = 1
        playerImage.image = UIImage(named: "playerRock.png")
        computerChoice(cpuImage: cpuImage)
        determineWinner(player: playerScore, cpu: cpuScore)
    }

    @IBAction func paperButtonPressed(_ sender: Any) {
        playerMove = 2
        playerImage.image = UIImage(named: "playerPaper.png")
        computerChoice(cpuImage: cpuImage)
        determineWinner(player: playerScore, cpu: cpuScore)
    }

    @IBAction func scissorButtonPressed(_ sender: Any) {
        playerMove = 3
        playerImage.image = UIImage(named: "playerScissor.png")
        computerChoice(cpuImage: cpuImage)
        determineWinner(player: playerScore, cpu: cpuScore)
    }
}

Espero que esto ayude

0
Gammaslash 132 12 nov. 2017 a las 22:23

2 respuestas

La mejor respuesta

Está mezclando el código Swift 2 y 3 e incluso en Swift 2 no hay pathForResources (plural) API.

Si está buscando una URL, utilice la API relacionada con la URL:

Bundle.main.url(forResource: "Music", withExtension: "mp3")

Y el AVAudioPlayer inicializador throws

do {
    let url = Bundle.main.url(forResource: "Music", withExtension: "mp3")!
    let backgroundAudio = try AVAudioPlayer(contentsOf: url)
} catch {
    print(error)
}

En este caso incluso puedes escribir

   let url = Bundle.main.url(forResource: "Music", withExtension: "mp3")!
   let backgroundAudio = try! AVAudioPlayer(contentsOf: url)

Porque el inicializador siempre tendrá éxito (si no es un error de diseño).

Editar:

Esta es una forma de crear el reproductor de audio con un cierre

class ViewController: UIViewController {

    let backgroundAudio : AVAudioPlayer = {
        let url = Bundle.main.url(forResource: "Music", withExtension: "mp3")!
        return try! AVAudioPlayer(contentsOf: url)
    }()

}

Y tocar el sonido

let controller = ViewController()
controller.backgroundAudio.play()

PD: No uses clases NS... como NSURL si hay una contraparte Swift nativa (URL)

2
vadian 12 nov. 2017 a las 19:49

La función a la que está llamando en su primera línea ya no se llama así. Use esto en su lugar:

var BackgroundAudio = AVAudioPlayer(contentsOf: NSURL(fileURLWithPath: Bundle.main.path(forResource: "Music", ofType: "mp3")!),error: nil)
0
Terje 12 nov. 2017 a las 19:31