2016-05-20 6 views
1

ユーザーが再生/一時停止、前方へのスキップ、後方へのスキップが可能なサウンドのバンクから4つのアイテムのランダムプレイリストを作成しようとしています。Swift 2.2:AVAudioPlayerのランダムプレイリストを作成する

私は、スウィフトとオブジェクト指向プログラミングの両方に新しい(ごめんなさい!)。現在Xcode 7.3.1を使用しています。

マイコード:

class ViewController: UIViewController { 

var E1Audio: AVPlayerItem? 
var E2Audio: AVPlayerItem? 
var E3Audio: AVPlayerItem? 
var E4Audio: AVPlayerItem? 
var E5Audio: AVPlayerItem? 
var E6Audio: AVPlayerItem? 

struct playlist { 
    var initialitems: [AVPlayerItem] = [] 
    var shuffleditems: [AVPlayerItem] { 
    initialitems.shuffle 
    } 
    var instanceplaylist: [AVPlayerItem]{ 
    shuffleditems[0...3] 
    } 
} 

var EnvPlaylist: [AVPlayerItem] = playlist(initialitems: [E1Audio, E2Audio, E3Audio, E4Audio, E5Audio, E6Audio]) 
let EnvPlayer = AVPlayer() 
var currentTrack = 0 

@IBAction func envPreviousTrack() { 
    if currentTrack-1 < 0 { 
     currentTrack = (EnvPlaylist.count - 1) < 0 ? 0 : (EnvPlaylist.count - 1) 
    } else { 
     currentTrack-1 
    } 
} 

@IBAction func envNextTrack() { 
    if currentTrack+1 > EnvPlaylist.count { 
     currentTrack = 0 
    } else { 
     currentTrack+1; 
    } 
} 

@IBAction func envPlayTrack() { 
    if EnvPlaylist.count > 0 { 
     EnvPlayer.replaceCurrentItemWithPlayerItem(InstancePlaylist2[currentTrack]) 
     EnvPlayer.play() 

override func viewDidLoad() { 
    super.viewDidLoad() 
let E1Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E1Audio", withExtension: "wav")!) 
let E2Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E2Audio", withExtension: "wav")!) 
let E3Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E3Audio", withExtension: "wav")!) 
let E4Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E4Audio", withExtension: "wav")!) 
let E5Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E5Audio", withExtension: "wav")!) 
let E6Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E6Audio", withExtension: "wav")!) 

    } 
} 
} 

これはエラー与える:インスタンスメンバー 'E1Audio' タイプ 'のViewController' で使用することはできませんが。

EnvPlaylistの宣言をviewDidLoad()に移動すると、クラスレベルで関数envPreviousTrack()、envNextTrack()、およびenvPlayTrack()を定義してUIボタンにリンクすることができません。

どうすればこの問題を回避できますか?前もって感謝します。申し訳ありませんが、それはばかな質問です。

答えて

0

このような変数を直接宣言することはできません。これを行う:

class ViewController: UIViewController { 
    var E1Audio = AVPlayerItem() 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     E1Audio = AVPlayerItem.init(URL: NSBundle.mainBundle().URLForResource("E1Audio", withExtension: "wav")!) 
    } 
} 

すべてのオーディオアイテムでこれを繰り返します。

+0

ありがとうございました。変更を反映するために質問を更新しました。まだXcodeで同じエラーが発生していますか? –

+0

@OliverMcCallion viewDidLoadメソッドで、let before E1Audioを削除します。変数を再作成する必要はありません。 – penatheboss

関連する問題