我正在尝试设置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.
完全糊涂?这有什么办法吗?
答案 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(会让你的应用程序崩溃)。