尝试使用Swift AVPlayer播放音频

5

这是我当前的视图控制器:

import UIKit
import AVFoundation

class SecondViewController: UIViewController {
    override func viewDidLoad() {
        var player = AVPlayer()
            let url = "http://www.nasa.gov/mp3/640149main_Computers%20are%20in%20Control.mp3"
            let playerItem = AVPlayerItem( URL:NSURL( string:url ) )
            player = AVPlayer(playerItem:playerItem)
            player.rate = 1.0;
            player.play()
    }
}

当我在模拟器上运行代码时,没有听到任何声音,这可能是iOS模拟器不支持播放音频,或者是我的代码出了问题?
1个回答

9

将该行移动:

    var player = AVPlayer()

...这样它就在该行之前:

override func viewDidLoad() {

5
太好了! :) 如果你现在没事可做,可以在这里阅读相关内容:http://www.apeth.com/swiftBook/ch03.html#_variable_scope_and_lifetime 。你原来有一个“局部”变量,所以它在被使用之前就已经消失了。我将它提升到了“实例”变量的级别,因此它会一直存在,只要视图控制器存在。 - matt
谢谢提供链接,我会仔细阅读的。你能否澄清一下“它在还没开始播放之前就立刻死机”的意思? - Ajax jQuery
6
player.play()这行代码之后,viewDidLoad方法就结束了。因此,所有在该方法内部声明的局部变量都会销毁。这就是局部变量的含义,当程序执行超出其作用域时,它就会销毁。 - matt
没错,这很有道理吧?最终它会调用 player.play() 方法来播放音频文件,就是这样。 - Ajax jQuery
1
但是代码并不停止。即使玩家在玩游戏,它也不会“等待”。它立即继续执行,方法结束,玩家死亡。与此同时,玩游戏需要时间。如果玩家已经死亡,它怎么能继续玩呢?它需要存活足够长的时间才能玩。 - matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接