在我的iOS应用程序中,我需要播放声音。我有以下代码:
var audioFileLocationUrl = NSBundle.mainBundle().pathForResource("midnight", ofType: "m4a")
var error: NSError
var audioPlayer = AVAudioPlayer()
audioPlayer = AVAudioPlayer(contentsOfURL: audioFileLocationUrl, error: error)
audioPlayer.prepareToPlay()在线:
audioPlayer = AVAudioPlayer(contentsOfURL: audioFileLocationUrl, error: error)我有错误:无法找到接受所提供的参数的“init”重载
发布于 2014-07-09 06:28:06
编辑(有人向我指出,何时使用NSErrorPointer与何时使用NSError?)有明显的区别。以下是官方用语:
从“使用Swift与可可和客观-C.”
“当您需要报告错误的原因时,可以向函数中添加一个NSError out参数,其类型为NSErrorPointer。这种类型大致相当于Objective的NSError **,具有额外的内存安全性和可选类型。您可以使用前缀&操作符作为NSErrorPointer对象传递对可选NSErrorPointer类型的引用,如下面的代码清单所示。
var writeError : NSError?
AVAudioPlayer(contentsOfURL: audioFileLocationUrl, error: &writeError)发布于 2014-07-09 06:21:25
试一试
var error :NSError?
audioPlayer = AVAudioPlayer(contentsOfURL: audioFileLocationUrl, error: &error)如果检查失败,您将调用正确的方法并传入正确的对象类型。
收到此警告的原因是编译器找不到带有这些参数的init方法。
发布于 2014-07-09 06:23:24
更新:错误处理在Swift 2中发生了巨大变化。有关最新信息,请参阅文献资料。
对我来说,这段代码产生的错误'NSError‘不能转换为这是因为该方法试图通过引用获取一个错误,这样它就可以“写”回您的局部变量。在Obj C,这看起来像(NSError **)。(有趣的事实:AutoreleasingUnsafePointer<NSError?>在Swift中被别名为NSErrorPointer。)
实际上,如果您单击AVAudioPlayer查看它的声明,您将发现init方法定义为
init(contentsOfURL url: NSURL!, error outError: AutoreleasingUnsafePointer<NSError?>)因此,你必须:
NSError? (即Optional<NSError>)变量,因为错误可能是nil。&操作符通过引用传递错误。
变量错误: NSError?audioPlayer = AVAudioPlayer(contentsOfURL: audioFileLocationUrl,error:&error)有关更多信息,请参阅“使用Swift与Cocoa和Objective”中的错误报告。
https://stackoverflow.com/questions/24646560
复制相似问题