音声即時再生のためのコード.prepareToPlay( )をコードに入れたところ、コンパイルエラーが出てしまいました。
初めまして。
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)です。
何か解決策があれば教えて下さい。
宜しくお願い致します。