初めまして。
swiftを勉強し始めて1週間の初心者です。(プログラミングの経験もかなり浅いです。)

先ほど「世界一受けたいiPhoneアプリ開発の授業」という本を元にコードの写経をしていたところ、コンパイルエラーが出てしまいました。
1〜2時間ほど考えてみたり、コードを打ち直してみたり、Xcodeを再起動してみたり、色々試しましたがエラーは消えず…。という状態です。

エラーでは

Value of Optional type "AVAudioPlayer" not unwrapped; did you mean to
use "!"or"?"?

エラーを治すための指示は

Fix-It Insert "!"

と書いてありますが、!を挿入してもエラーが出たままです。逆に?を挿入したらエラーは無くなるんですが、これってどういうことが原因なのでしょうか?

コードは下記になります。(冒頭のcopyrightなどは省略させていただきます。**で囲まれたところにエラーが出ます。)

import UIKit

import AVFoundation //AVFoundationをインポートする

class ViewController: UIViewController {
    var player:AVAudioPlayer?  //音声を制御するための変数

    //BGM再生メソッド
    func play(soundName:String){
    //String型の引数からサウンドを読み込む
        let soundPath = NSBundle.mainBundle().bundlePath.stringByAppendingPathComponent(soundName)

    //読み込んだファイルにパスをつける
        let url:NSURL? = NSURL.fileURLWithPath(soundPath)
    //playerに読み込んだmp3ファイルへのパスを設定する
        player = AVAudioPlayer(contentsOfURL: url, error: nil)
        player?.numberOfLoops = -1 //BGMを無限にループさせる
        **player.prepareToPlay() //音声を即時再生させる**
        player?.play() //音を再生させる
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        //playファイルの呼び出し、引数はファイル名
        play("BMG.mp3")
    }

    @IBAction func wineTapped(sender:UIButton){

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

ちなみに、これはコードの問題じゃないのかもしれませんが、上記コードの**で囲まれた部分を修正してエラーがない状態にしても、シミュレーターを立ち上げた際にうまく立ち上がってくれません。

なお、Xcodeのバージョンは6.3.1(6D1002)です。

何か解決策があれば教えて下さい。

宜しくお願い致します。