? ? ? ? 當(dāng)函數(shù)體與執(zhí)行體分離完畢后,我們開始解析執(zhí)行體代碼如下

執(zhí)行體解析
????????對于函數(shù)執(zhí)行體,內(nèi)部有2-6 和8 這個(gè)模塊,我們利用一個(gè)musicArray來記錄對應(yīng)的音效,用timeArray記錄執(zhí)行時(shí)間,對于number為3,4,5 的時(shí)候,我們可直接把對應(yīng)音效和時(shí)間分別添加至musicArray與timeArray。當(dāng)進(jìn)入循環(huán)體的時(shí)候,我們需要將循環(huán)內(nèi)容用一個(gè)array存儲起來,遞歸解析,函數(shù)也是如此。
? ? ? ? 當(dāng)音效與時(shí)間解析完畢之后,我們可以進(jìn)入播放模式了。
? ? ? ? 首先我們創(chuàng)建一個(gè)播放類,便于控制我們將它做成單利

播放單利
? ? ? ? 預(yù)加載音效(建議直接在appdelegate中調(diào)用)

預(yù)加載音效
????播放按鈕點(diǎn)擊(帶暫停與播放功能)

播放控制
? ? ? ? 此處曲子的播放也可以采用播放完當(dāng)前的音效再創(chuàng)建并播放下一的方案,不過由于operationQueue對線程的控制很友好,此處我決定采用一次性創(chuàng)建任務(wù),播放與暫停交給operationQueue來控制。
????????獲得播放狀態(tài)后,就開始播放曲子,(此處我通過代理方法告知vc中按鈕的狀態(tài),因?yàn)槿绻诓シ胖?,我重新編了一首曲子來播放,vc中按鈕是很難直接得到當(dāng)前的狀態(tài)的)

音樂播放與暫停

曲子切換與曲子停止