答案 0 :(得分:1)
首先,以下是解决解决此问题的方法:
// THIS IS BAD, DO NOT DO IT LIKE THAT:
private var _currTrack : MPMediaItem?
var currentTrack : MPMediaItem? {
get { return playlist?.items[index] }
set { _currTrack = newValue }
}
现在为什么你应该不使用这个hack:同一属性的getter和setter应该同意,因为一旦你将它设置为X
,getter应该正常给你X
回来。你的方法不会这样做。
更好的解决方案是在播放列表项目中查找newValue
的索引,并在找到匹配值时设置index
:
var currentTrack : MPMediaItem? {
get {
return playlist?.items[index]
}
set {
if let tmp = playlist?.items.indexOf(newValue) {
index = tmp
}
}
}