AVAudioPlayer的属性为"无法分配此属性的结果"

时间:2014-06-10 10:05:30

标签: ios avaudioplayer swift

我正在尝试设置AVAudioPlayer的以下属性,但它会出错。

错误:

  

无法指定此属性的结果

代码:

self.player = AVAudioPlayer(contentsOfURL: url, error: &error)
self.player?.numberOfLoops = 0 // Error here
self.player?.delegate = self // Error here
if(!self.player?.prepareToPlay()){... } // This seems to good.

完全糊涂?这有什么办法吗?

2 个答案:

答案 0 :(得分:1)

可选链接不支持设置属性值。它仅用于查询(请参阅:获取)属性和调用方法。

您的代码应改为:

if let myPlayer = self.player? {
    myPlayer.numberOfLoops = 0
    myPlayer.delegate = self
}

如果对象具有值,则仅设置对象的属性。由于您的ivar很可能被定义为var player: AVAudioPlayer?,因此编译器实际上并不知道它是否具有值。

正如语言指南中所述,Calling Properties Through Optional Chaining部分:

  
    

但是,您无法通过可选链接设置属性值。

  

答案 1 :(得分:1)

我所做的是将我的班级player属性的类型声明为AVAudioPlayer!。我可以这样做,因为我碰巧知道这个课程总是有一个音频播放器。反过来,这意味着我不必再次使用?!;我可以说self.player,一切正常。

如果你使用这种方法并且你对是否确实有一个玩家有疑问,只需说if self.player - 如果没有玩家那就错了,现在你可以避免和{{1好像它是一个真正的AVAudioPlayer(会让你的应用程序崩溃)。